如果您要通过/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'”?
答案 0 :(得分: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
生成实际请求,而不是内部重写的请求。