Apache重写规则不会触发

时间:2012-02-08 21:35:09

标签: apache .htaccess mod-rewrite

我想要这个网址:

http://www.awesomehost.com/accountants/Ceribelli-Associates-cd01qazwsxoztfnlvsim.html

并将其重定向到:

http://www.awesomehost.com/accountants/accountant-directory.php?ID=cd01qazwsxoztfnlvsim

以下是我在会计师目录的.htaccess中所拥有的内容:

RewriteEngine On
RewriteRule ^accountants/(.*)-cd0(.*).html /accountants/accountant-directory.php?ID=cd0$2 [L,P]

我还尝试使用前导斜杠并移除了P标志:

RewriteEngine On
RewriteRule ^/accountants/(.*)-cd0(.*).html /accountants/accountant-directory.php?ID=cd0$2 [L]

但由于某种原因,它没有被触发?

当我在.htaccess文件中输入一些随机文本时,我收到apache错误,所以我知道它正在读取文件......

有任何帮助吗?

2 个答案:

答案 0 :(得分:1)

RewriteRule在TLD之后开始匹配,并且您在没有前导斜杠的情况下匹配行首。那么如果你尝试怎么办?

RewriteRule ^/accountants/(.*)-cd0(.*).html ...

顺便说一句,小心使用编程生成的URL和。*重写 - 注意贪婪与非贪婪的匹配。

另外,确保[P]是你想要的吗?如果使用了恶意制作的URL并且您的RewriteRule未被充分过滤,则可能会冒着代理到非预期服务器的风险。

答案 1 :(得分:0)

尝试删除模式的“会计师/”部分。 Apache仅从.htaccess文件的当前目录开始匹配。

RewriteEngine On
RewriteBase /accountants
RewriteRule ^(.*?)-cd0(.*?).html accountant-directory.php?ID=cd0$2 [L]