Mod_rewrite没有正确重定向所有情况

时间:2013-05-27 06:29:08

标签: apache .htaccess mod-rewrite

我似乎总是遇到麻烦,无论我尝试什么,都无法让所有案例都能正确重定向。

我目前有

example.com/anything

正确地重定向到

example.com/track.php?memb=anything

基本上任何带有文件类型的url都应该忽略所有重定向。我在顶部还有一个子域规则,我认为它是正确实现的,不会干扰我想要添加的内容。所有这一切目前都正常使用以下代码:

Options +FollowSymLinks
RewriteEngine On
RewriteBase /

RewriteCond %{HTTP_HOST} ^www\.(.+)$ [NC]
RewriteRule .* http://%1%{REQUEST_URI} [R=301,L]

RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d

RewriteCond %{REQUEST_URI}  !\.(jpg|png|css|js|php)?  [NC]
RewriteCond %{REQUEST_URI}  ^/([^/]+)/?           [NC]

RewriteRule .*           track.php?memb=%1        [L,E=END]

我需要添加以下规则:

example.com/c/whatever

需要重定向到

example.com/page2.php?c=whatever

经过多次尝试和修改一些现行规则后,我似乎无法让它发挥作用,但我认为我很接近

RewriteRule ^c/(.*)$ page2.php?c=$1 [L,E=END]

1 个答案:

答案 0 :(得分:1)

RewriteCond仅对下一个RewriteRule有效。此外,

RewriteCond %{REQUEST_URI}  !\.(jpg|png|css|js|php)?  [NC]

将匹配名称中包含.的任何内容。由于最后有?,扩展名是否有效名称无关紧要。

试试这个:

Options +FollowSymLinks
RewriteEngine On
RewriteBase /

RewriteCond %{HTTP_HOST} ^www\.(.+)$   [NC]
RewriteRule .* http://%1%{REQUEST_URI} [R=301,L]

RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteCond %{REQUEST_URI}      !\.(jpg|png|css|js|php)$ [NC]
RewriteRule ^c/([^/]+)/?        page2.php?c=$1           [L,E=END]

RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteCond %{REQUEST_URI}      !\.(jpg|png|css|js|php)$ [NC]
RewriteRule ^([^/]+)/?          track.php?memb=$1        [L,E=END]