以下是我的.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
),它们会正常加载。
为什么这两条规则不起作用?
答案 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”。
这有助于网络服务器知道在哪里查找文件,有时可以解决这种奇怪的行为。