.htaccess mod_rewrite不一致

时间:2015-06-12 08:22:07

标签: php apache .htaccess mod-rewrite

以下是我的.htaccess文件中的示例:

RewriteEngine On

RewriteRule ^login/?$           loginregister.php [L]
RewriteRule ^register/?$        loginregister.php [L]
RewriteRule ^member/([^/]*)$    member.php?id=$1 [L]
RewriteRule ^members/?$         members.php [L]
RewriteRule ^membership/?$      membership.php [L]
RewriteRule ^contact/?$         contact.php [L]
RewriteRule ^privacy/?$         privacy.php [L]
RewriteRule ^terms/?$           terms.php [L]

如果我访问example.com/login,则会加载example.com/loginregister.php

同样适用于member/members/membership/contact/

但是,我刚刚添加了privacy/terms/的规则,但它们无效。

访问这两个页面时,我看到了这个错误:

Not Found

The requested URL /privacy was not found on this server.
Apache/2.4.10 (Unix) Server at example.com Port 80

但是,如果我直接访问它们(/privacy.php/terms.php),它们会正常加载。

为什么这两条规则不起作用?

2 个答案:

答案 0 :(得分:2)

正如我在comment中提到的那样,如果你从下到上改变你的规则,它将起作用。可能的原因可能是相互冲突的规则。所以你的.htaccess看起来应该是,

RewriteEngine On

RewriteRule ^privacy/?$         privacy.php [L]
RewriteRule ^terms/?$           terms.php [L]
RewriteRule ^login/?$           loginregister.php [L]
RewriteRule ^register/?$        loginregister.php [L]
RewriteRule ^member/([^/]*)$    member.php?id=$1 [L]
RewriteRule ^members/?$         members.php [L]
RewriteRule ^membership/?$      membership.php [L]
RewriteRule ^contact/?$         contact.php [L]

答案 1 :(得分:0)

如果您没有RewriteBase,请尝试在.htaccess文件中添加“RewriteBase /”或“RewriteBase / your / rewrite / path”。

这有助于网络服务器知道在哪里查找文件,有时可以解决这种奇怪的行为。