重定向多个slu h htaccess

时间:2014-12-12 14:29:53

标签: php .htaccess

我的htaccess代码是

RewriteEngine on
RewriteBase /
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteCond %{REQUEST_URI}  ^/newhome/hello-1/   [NC]
RewriteRule .*   newhome/hello-2/   [R=301,L]

RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteCond %{REQUEST_URI}  ^/newhome/hello-3/   [NC]
RewriteRule .*   newhome/hello-4/   [R=301,L]

RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteCond %{REQUEST_URI}  ^/newhome/hello-5/   [NC]
RewriteRule .*   newhome/hello-6/   [R=301,L]

这里只有第一个条件有效,但其他条件不起作用

任何人都可以帮助我

谢谢

1 个答案:

答案 0 :(得分:2)

保持重写逻辑清洁的一种方法是使用跳过规则。第一条规则是“如果URI已经映射到文件或目录,请跳过接下来的三条。如果在这种情况下没有其他重写要做,只需将SKIP=3替换为END,如果否则使用Apache 2.4+和LAST

RewriteEngine on
RewriteBase /
RewriteCond %{REQUEST_FILENAME} -f [OR]
RewriteCond %{REQUEST_FILENAME} -d
RewriteRule ^                   -  [SKIP=3]

RewriteRule ^newhome/hello-1/ newhome/hello-2/   [R=301,L]
RewriteRule ^newhome/hello-3/ newhome/hello-4/   [R=301,L]
RewriteRule ^newhome/hello-5/ newhome/hello-6/   [R=301,L]

除非这可能不符合您的意图。考虑请求Newhome/hello-3/something。这将匹配规则3,因此URI将被目标newhome/hello-4/替换 - something位将丢失。如果您想保留此内容,请尝试:

RewriteRule ^newhome/hello-1(/?.*) newhome/hello-2$1   [R=301,L]