Apache网站.htaccess实现rewrite重写失败的三个原因
作者:admin 时间:2018-2-2 15:53:4 浏览:今天想使用.htaccess实现一个rewrite重写功能,谁知照搬其他网站的.htaccess过来后连网站都访问不了了,于是研究下使用Apache服务器的网站是如何用.htaccess实现rewrite重写的,此文记录的是本人的一点心得,对新手具有参考作用。
原因一:没有启用 rewrite_module
首先检查是否启用了 rewrite_module
。如何启用?打开 httpd.conf
文件,此文件在Apache的安装目录下。
对于windows系统,默认安装路径是:
C:\Program Files\Apache Software Foundation\Apache2.2\conf
对于Linux系统,可通过 find
命令来搜索:
find / -name httpd.conf
然后把 #LoadModule rewrite_module
前面的 #
号去掉即可。
启用rewrite_module
最后不要忘了重启Apache,以使更改生效。
原因二:.htaccess没有RewriteEngine On
要.htaccess支持rewrite重写,必须要在前面写上一句:
RewriteEngine On
否则,.htaccess里的 RewriteRule
语句是无效的。
RewriteEngine On 不能少
温馨提示:更改.htaccess后立即生效,无需重启Apache服务器。
原因三:正则表达式写法错误
除了上述的两个原因外,如果 RewriteRule
的正则表达式有误,也会导致 rewrite
重写失败。因此你需要确保你的正则写法无误。你可以写一个最简单的 RewriteRule
测试一下重写功能是否有效。如本案例写的:
RewriteRule ^test/index.html$ /index.html
意思是访问 /test/index.html
时会跳到 /index.html
,跳转成功则表示重写功能有效。
最后附上一条对URL重写的实例,供大家参考学习:
RewriteRule ^article/([^/]+)/([^/]+)/([^/]+)/(.*)$ /article.php?issue=$1&edition=$2&id=$3&title=$4 [L,QSA,NC]
这条语句可以对URL
/article.php?issue=1&edition=leeds&id=1394216062&title=apache-falls-to-be-started
进行重写
/article/1/leeds/1394216062/apache-falls-to-be-started
解释:
L : last,表示已是最后一条规则,.htaccess文件解析将退出。
QSA : query string append,表示追加请求串,此标记强制重写引擎在已有的替换串中追加一个请求串,而不是简单的替换。 如果需要通过重写规则在请求串中增加信息,就可以使用这个标记。
NC : no case,不区分大小写,忽略大小写。
R : redirect,重定向。
F : forbidden,禁止访问。
您可能对以下文章也感兴趣
- 站长推荐