2012-02-17 19 views
1

我需要建立以下規則在我的.htaccess放置mod_rewrite的:如何在本地文件夾,子文件夾搜索,然後重定向到index.php

  1. 首先我想execetue主文件夾文件( /)(如果requestedfile存在)
  2. 其次我想在子文件夾中搜索此文件 - > /子文件夾
  3. 並且如果該文件不存在於第1點和第2點id之類的重定向請求do/index.php

什麼是最好的方式來做到這一點。

感謝您的幫助:)

PS的第一點不再成爲一個簡單的解決方案。因此,如果用戶輸入url /file.jpeg,服務器將在/子文件夾中搜索此文件,如果沒有找到此文件比它將重定向rquest做index.php

+0

的後續問題 - > http://stackoverflow.com/questions/9330058/mod-rewrite-redirect-request-to-subdir-with-many-subfolders-of-different-struct – Seba 2012-02-17 14:34:40

回答

1

我假設你的URL看起來像這樣:somesite.com/subfolder/file.extension如果URL不同,請提供詳細信息。
將此添加到您的DocumentRoot.htaccess中。

Options +FollowSymLinks -MultiViews -Indexes 

RewriteEngine on 
RewriteBase/

RewriteCond %{ENV:REDIRECT_STATUS} 200 
RewriteRule^- [L] 

RewriteCond %{REQUEST_URI} ^/([\w]+)/([\w]+\.[\w]+)$ [NC] 
RewriteCond %{DOCUMENT_ROOT}/%2 -f 
RewriteRule^/%2 [NC,L] 

RewriteCond %{REQUEST_FILENAME} -f 
RewriteRule^- [L] 

RewriteRule^/index.php [L] 

改變,以適應OP的要求。

RewriteEngine on 
RewriteBase/

RewriteCond %{ENV:REDIRECT_STATUS} 200 
RewriteRule^- [L] 

RewriteCond %{REQUEST_URI} ([\w]+\.[\w]+)$ [NC] 
RewriteCond %{DOCUMENT_ROOT}/%1 -f 
RewriteRule^/%1 [NC,L] 

RewriteCond %{REQUEST_URI} ([\w]+\.[\w]+)$ [NC] 
RewriteCond %{DOCUMENT_ROOT}/subdir/%1 -f 
RewriteRule^/subdir/%1 [L] 

RewriteRule^/index.php [L] 
+0

但在哪裏我定義要在 - > /子文件夾中搜索的子文件夾的名稱?假設用戶輸入url http://domain/xxx.jpeg。我不想首先在/中查找文件,然後在/子文件夾中查找文件,如果找不到文件,我想重定向請求。/index.php – Seba 2012-02-17 11:46:01

+1

如果您位於共享託管服務中,您可能會發現%{DOCUMENT_ROOT}不起作用。如果是這樣,執行'phpinfo()'腳本並查找變量,例如包含相同根目錄的** PHP_DOCUMENT_ROOT **或** DOCUMENT_ROOT_REAL **。然後,您可以使用它,例如'%{ENV:PHP_DOCUMENT_ROOT}'。 – TerryE 2012-02-17 11:49:37

+1

Ooops,也是%2不會攜帶到下一個規則,因此您需要使用不同的粘性。 – TerryE 2012-02-17 11:54:38

1

這只是ThinkingMonkey概述方法的補充。正如我所評論的,%變量僅在下一個條件或規則上可用。然而,規則$變量可用於conds和規則替換字符串兩者,因此排除2應寫爲(使用相同的警告有關使用DOCUMENT_ROOT):

RewriteCond %{DOCUMENT_ROOT}/$1 -f 
RewriteRule \w+/(\w+\.\w+)$ $1 [NC,L] 

,或者如果你想要做的相反

RewriteCond %{DOCUMENT_ROOT}/subdir/$1 -f 
RewriteRule (\w+\.\w+)$ subdir/$1 [NC,L] 
相關問題