我的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]
这里只有第一个条件有效,但其他条件不起作用
任何人都可以帮助我
谢谢
答案 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]
等