2013-01-09 27 views
0

如果該文件夾中存在該文件,我想將所有請求重定向到我的網站上的文件夾「site」。帶-f條件的RewriteCond錯誤

例如:如果我的網站包含的文件/foo/foo.html,/bar/bar.html和/site/site.html 我想以下重定向:

/foo/foo.html -> /foo/foo.html 
/bar/bar.html -> /bar/bar.html 
/site/site.html -> /site/site.html 
/site.html -> /site/site.html 

我想這樣的事情應該做的伎倆:

Options +FollowSymLinks 
RewriteEngine On 
# Check if the requested path is not a real file or folder 
RewriteCond %{DOCUMENT_ROOT}/site/%{REQUEST_URI} -f 
# if not a real file/folder: myhost.com/blabla -> myhost.com/site/blabla 
RewriteRule ^(.*)$ %{DOCUMENT_ROOT}/site/$1 [R=301,L] 

但我在日誌中得到這些錯誤:

[warn] RewriteCond: NoCase option for non-regex pattern '-f' is not supported and will be ignored. 

有什麼想法可能是錯的?我沒有從這個錯誤谷歌得到很多...

P.s .:我使用一個bluehost網站和mod_rewrite是活動的。

回答

1

我想這應該做的伎倆:

RewriteEngine On 
RewriteCond %{REQUEST_URI} !-f 
RewriteRule ^(.*)$ /site/$1 [R=301,L] 

如果你需要所有未知的請求轉到site.html你應該使用:

RewriteRule ^(.*)$ /site/site.html [R=301,L] 
+0

我想重定向去到該文件夾​​的網站,而不是專門網站/ site.html,所以第一個應該工作。 我得到了很多「[警告] RewriteCond:NoCase選項的非正則表達式模式'-f'不被支持,將被忽略。」並得到了一個類似於這樣的結果網址的重定向次數錯誤:http://mysite/site/site/site/site/site/site/site/site/site/site.html。我以爲L應該停止未來的重寫? 這就是爲什麼我在我的例子中做了相反的事情,在試圖重定向到文件之前測試文件site/site.html是否存在。 – Florian

+0

問題來自Options + FollowSymLinks,它在我的服務器上不受支持...我使用SymLinksIfOwnerMatch來代替它,它可以與我的代碼一起工作,而您的代碼不帶循環。謝謝 ! – Florian