RewriteRule不工作,但其他人呢?

时间:2015-05-04 05:23:15

标签: apache .htaccess mod-rewrite

这是我当前的.htaccess文件:

Options +FollowSymlinks
Options -Indexes

<IfModule mod_rewrite.c>
RewriteEngine On
RewriteRule    ^feature/$         /items/feature [L]
RewriteRule    ^feature$          /items/feature [L]
RewriteRule    ^top_sellers/$        /items/top_sellers [L]
RewriteRule    ^top_sellers$         /items/top_sellers [L]
RewriteRule    ^support/$         /contacts [L]
RewriteRule    ^support$          /contacts [L]
RewriteCond %{REQUEST_FILENAME} !-d
RewriteCond %{REQUEST_FILENAME} !-f
RewriteRule ^(.*)$ index.php?url=$1 [QSA,L]
</IfModule>

除了以下内容之外,所有重写规则都有效:

RewriteRule    ^support/$         /contacts [L]
RewriteRule    ^support$          /contacts [L]

我不明白为什么mysite.com/support会在所有其他重定向工作正常时显示404页面。此外,当我转到mysite.com/contacts时,没有404错误 - 它正确加载页面。

在cPanel服务器上,由于某些奇怪的原因,网址中带有support的重定向是否有任何原因?

2 个答案:

答案 0 :(得分:0)

您可以使用此单一规则

代替这两条规则
RewriteRule ^support/?$ /contacts [NC,L] 

在此模式中,url末尾的斜杠是可选的。并且将接受以斜杠(/)结尾的URL。

答案 1 :(得分:0)

您的规则可以整合很多,但也要告诉Apache在处理规则之前确保它不是真正的文件或目录。试试这些规则。

Options +FollowSymlinks -Indexes -Multiviews

<IfModule mod_rewrite.c>
RewriteEngine On
RewriteCond %{REQUEST_FILENAME} !-d
RewriteCond %{REQUEST_FILENAME} !-f
RewriteRule ^(feature|top_sellers)/?$ /items/$1 [L,NC]
RewriteCond %{REQUEST_FILENAME} !-d
RewriteCond %{REQUEST_FILENAME} !-f
RewriteRule ^support/?$ /contacts [L,NC]
RewriteCond %{REQUEST_FILENAME} !-d
RewriteCond %{REQUEST_FILENAME} !-f
RewriteRule ^(.*)$ index.php?url=$1 [QSA,L]
</IfModule>