0

如果您有一个文件/foo/index.html要通过/bar/index.html重写很容易访问:

RewriteRule ^bar/(.*)$    foo/$1 [L] # <-- Leaves URL the same, but gives content of foo/

但这意味着两者/foo/index.html现在都/bar/index.html在努力访问内容。现在有没有办法禁止通过访问/foo/index.html?只是在做:

RewriteRule ^foo/(.*)$    bar/$1 [R=301,L] # <-- Change the URL if accessed via /foo
RewriteRule ^bar/(.*)$    foo/$1 [L] # <-- Leaves URL the same, but gives content of foo/

导致重定向循环。有没有办法指示“将 foo 重定向到 bar,除非 URL 已经是 '/bar'”?

4

1 回答 1

0

是的,但是您需要检查一下,%{THE_REQUEST}否则您的两条规则将不断改变彼此的重写和循环。所以像:

# this is the rule you already had:
RewriteRule ^bar/(.*)$    foo/$1 [L]

# this is the rule that externally redirects
RewriteCond %{THE_REQUEST} ^[A-Z]{3,9}\ /foo/
RewriteRule ^foo/(.*)$ /bar/$1 [L,R=301]

%{THE_REQUEST}变量的检查确保了实际请求是针对 的/foo,而不是内部重写的请求。

于 2012-10-30T20:05:29.703 回答