Apache中解决动态地址跳转死循环的方法
问题背景:矿秘书网的历史遗留问题,刚开始由于各种问题,一些动态页面都是用了?id=参数的形式,对seo/seo.html" target="_blank">搜索引擎不友好,经常多方面考虑,还是改成伪静态。这里劝各位站长在做新站时,尽量使用伪静态,不仅对搜索引擎,对用户体验也友好。
问题描述:需要将 /news/show_news.php?id=1 形式的地址伪静态成 /news/1 形式,而且 /news/show_news.php?id=1 在浏览器打开要 301 跳转到 /news/1 去。
但是在 .htaccess 加入规则,出现了死循环,死循环规则如下
RewriteRule ^(d+)$ /news/show_news.php?id=$1 [L] RewriteCond %{QUERY_STRING} ^id=(d+)$ [NC] RewriteRule ^show_news.php$ /news/%1? [L,R=301]
死循环原因:/news/show_news.php?id=1 跳转到 /news/1,而且 /news/1 被重写为 /news/show_news.php?id=1,/news/show_news.php?id=1 再次跳转到 /news/1,这样,泪流满面!
解决办法:只要在rewrite的时候,添加一个常量参数,这样的url和301的url就不一样了,规则如下:
RewriteRule ^(d+)$ /news/show_news.php?id=$1&r=1 [L] RewriteCond %{QUERY_STRING} ^id=(d+)$ [NC] RewriteRule ^show_news.php$ /news/%1? [L,R=301]
终于解决了,泪奔……
以上为真实案例,环境是apache。
相关推荐
-
Apache 虚拟目录和默认首页的设置
虚拟目录 1.找到"conf/httpd.conf" 文件 2.在节点:<IfModule alias_module>里增加 Alias /aidd2008 "D:/php/web/aidd2008" 其中 aidd2008 是你想要访问的虚拟目录: D:/php/web/aidd2008 为物理路径,以[/]代替[\]" 我们就在</IfModule>后面接着加: 复制代码 代码如下: <Directory "D:
-
windows中apache 301页面跳转实现方法
实现301页面跳转之前需要对apache配置做下修改如 apache默认是没有开启mod_rewrite模块的, 1,将 复制代码 代码如下: #LoadModule rewrite_module modules/mod_rewrite.so 这一行前面的#号去掉,http.conf的站点目录配置,另一种是空间用户常用的 改为 复制代码 代码如下: LoadModule rewrite_module modules/mod_rewrite.so, 2,将AllowOverride None 改为
-
让apache显示目录列表的配置方法
1.apache中显示目录列表 在http.conf中加入如下代码(如有虚拟主机配置,加在虚拟主机配置段内),并把主目录内的index.pho,index.html,index.htm文件删除 复制代码 代码如下: Alias /download "/download" <Directory "/download"> Options Indexes Order allow,deny IndexOptions Charset=UTF-8
-
Apache mod_rewrite实现HTTP和HTTPS重定向跳转
当你的站点使用了HTTPS之后,你可能会想把所有的HTTP请求(即端口80的请求),全部都重定向至HTTPS(即端口443).这时候你可以用以下的方式来做到:(Apache mod_rewrite) <IfModule mod_rewrite.c> RewriteEngine On RewriteBase / RewriteCond %{SERVER_PORT} 80 RewriteRule ^(.*)$ https://jb51.net/$1 [R=301,L] </IfModule&
-
apache设置自动将http跳转到https的方法
复制代码 代码如下: <Directory "/opt/fivetrees">## Possible values for the Options directive are "None", "All",# or any combination of:# Indexes Includes FollowSymLinks SymLinksifOwnerMatch ExecCGI MultiViews## Note that "
-
禁止apache显示目录索引的常见方法(apache禁止列目录)
禁止Apache显示目录索引,禁止Apache显示目录结构列表,禁止Apache浏览目录,这是网上提问比较多的,其实都是一个意思.下面说下禁止禁止Apache显示目录索引的常见的3种方法.要实现禁止Apache显示目录索引,只需将 Option 中的 Indexes 去掉即可. 1)修改目录配置: 复制代码 代码如下: <Directory "D:/Apache/blog.phpha.com">Options Indexes FollowSymLinks # 修改为: Op
-
Apache无法自动跳转却显示目录的解决方法
Apache无法自动跳转却显示目录这是因为Apache服务器下conf/httpd.conf没有配置好,其默认是不跳转,直接显示目录 首先,我们需要禁止Apache直接显示目录. 方法在搜索Options Indexes FollowSymLinks,将其该为Options FollowSymLinks 其实,解决Apache无法自动跳转的问题,这是因为Apache本来只是一个http服务器,不会自动跳转到index.php页面.需要定位<IfModule dir_module>这一项,将Di
-
Apache中使非伪静态url跳转到伪静态url的方法
如何使用.htaccess使非伪静态页面301跳转到伪静态页面然后再跳转?这是一个比较蛋疼的跳转.因为不小心就会搞成死循环导致页面无法打开.好在问题最终解决了.记录并分享出来,给需要的朋友借鉴借鉴. 规则如下: RewriteRule ^article-([0-9]+).html$ /article.php?id=$1&r=1 [L] RewriteCond %{QUERY_STRING} ^id=([0-9]+)$ [NC] RewriteRule ^article.php$ /article
-
Apache Rewrite实现URL的301跳转和域名跳转
如果要想用到rewrite模块,必须先安装或加载rewrite模块.方法有两种一种是编译apache的时候就直接安装rewrite模块,别一种是编译apache时以DSO模式安装apache,然后再利用源码和apxs来安装rewrite模块. 基于服务器级的(httpd.conf)有两种方法,一种是在httpd.conf的全局下直接利用RewriteEngine on来打开rewrite功能;另一种是在局部里利用RewriteEngine on来打开rewrite功能,下面将会举例说明,需要注意
-
Apache的Rewrite设置多域名301跳转到主域名的方法
如果网站有多个域名,而又不希望分散权重,则可以通过开启Rewrite设置,将多个域名都301跳转到主域名之下,具体代码如下: RewriteEngine On RewriteCond %{HTTP_HOST} ^mituxiu.com [NC,OR] RewriteCond %{HTTP_HOST} ^www.mituxiu.com [NC,OR] RewriteCond %{HTTP_HOST} ^metooshow.com [NC] RewriteRule ^(.*)$ http://www
随机推荐
- js substring()字符串截取函数
- mybatis collection 多条件查询的实现方法
- SQL SERVER 2008 64位系统无法导入ACCESS/EXCEL怎么办
- VBS编程教程 (第6篇)
- C#.net 微信公众账号接口开发
- 绝对经典的滑轮新闻显示(javascript+css)实现
- Asp.Net数据控件引用AspNetPager.dll分页实现代码
- C# 中将数值型数据转换为字节数组的方法
- jquery ajax的success回调函数中实现按钮置灰倒计时
- 详解JavaScript的流程控制语句
- JS Array.slice 截取数组的实现方法
- 探讨fckeditor在Php中的配置详解
- Mysql优化调优中两个重要参数table_cache和key_buffer
- jQuery简单实现日历的方法
- javascript实现Table间隔色以及选择高亮(和动态切换数据)的方法
- asp.net通过HttpModule自动在Url地址上添加参数
- 什么是MVC,好东西啊
- 利用WIN2000实现两个网段的路由
- jQuery实现checkbox的简单操作
- python简单图片操作:打开\显示\保存图像方法介绍