是否需要重写条件?

时间:2016-09-11 16:58:21

标签: .htaccess mod-rewrite

我在.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,以更准确地反映我正在使用的内容。

1 个答案:

答案 0 :(得分:0)

似乎Apache或mod_rewrite版本不兼容PCRE。当我将(\w+)更改为([a-z]+)时,重写开始工作。我将不得不避免使用正则表达式的快捷方式,而是使用更长的等价物。

编辑:修改了html以包含<base href="/" />,然后其他问题(与CSS和包含的图像相关)消失了。还修改了localhost,以便在DocumentRoot

中进行测试

注意:在这种情况下主机不知道他们遇到了与PCRE兼容的正则表达式的问题,并且正在检查问题。