我在.htaccess文件中有以下内容,它在XAMPP上运行良好,但在我的网站主机上不起作用:
<IfModule mod_rewrite.c>
Options All -MultiViews
RewriteEngine on
RewriteRule ^content/tagged/(\w+)/?$ content.html?tagged=$1 [NC,L,QSA]
RewriteCond %{REQUEST_FILENAME} !-d
RewriteCond %{REQUEST_FILENAME}.html -f
RewriteRule !.*\.html$ %{REQUEST_URI}.html [L]
</IfModule>
在XAMPP上,所有规则都有效,在主机上只有第二条规则有效。第一条规则给了我404错误。我是否需要为第一条规则添加条件?
编辑:第一条规则应该处理example.com/content/tagged/foo(对于content.html?tagged = foo),但不是。第二条规则成功处理了example.com/content(对于content.html)。
编辑:从上面的代码中移除了RewriteBase
,以更准确地反映我正在使用的内容。
答案 0 :(得分:0)
似乎Apache或mod_rewrite版本不兼容PCRE。当我将(\w+)
更改为([a-z]+)
时,重写开始工作。我将不得不避免使用正则表达式的快捷方式,而是使用更长的等价物。
编辑:修改了html以包含<base href="/" />
,然后其他问题(与CSS和包含的图像相关)消失了。还修改了localhost,以便在DocumentRoot
注意:在这种情况下主机不知道他们遇到了与PCRE兼容的正则表达式的问题,并且正在检查问题。