2012-10-30 93 views
0

如果你有,你想通過/bar/index.html這是很容易與重寫訪問文件/foo/index.html用mod_rewrite更改文件名?

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吧,除非URL已經是'/ bar'」?

回答

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做出,而不是內部重寫的請求。

+0

Bravo!我試圖搞亂'%{REQUEST_URI}'讓這個工作,沒有運氣; '%{THE_REQUEST}'按預期工作! – MidnightLightning