2011-03-04 47 views
0

我想爲一個子域創建一個規則,該子域會重定向到根目錄中的文件。如果規則不匹配,則應將用戶重定向到原始域。規則不適用於現有文件

這兩個子域和域鏈接到同一目錄。但是,如果給定REQUEST_URI的第一個子目錄與目錄中的文件名匹配,那麼我的規則似乎不匹配REQUEST_URI。

信息:

  • HTTP://sub.domain.tld - >根目錄
  • HTTP://domain.tld - >根目錄
  • 文件test.php的存在於根 - 包含內容的目錄:print_r($ _ SERVER ['QUERY_STRING']);

RewriteEngine On 
RewriteBase/

RewriteCond %{HTTP_HOST} ^sub\. [NC] 
RewriteCond %{REQUEST_URI} ^/([a-z]+)/ [NC] 
RewriteRule ^test/ http://domain.tld/ [L,R=301] 
RewriteRule ^([a-z]+)/(.*)$ test.php?dir=$1&data=$2 [L] 

隨着http://sub.domain.tld/xyz/something的test.php的輸出 「DIR = XYZ &數據=東西」。

但是,如果我使用http://sub.domain.tld/test/something我只得到一個空白頁。但是這也應該輸出「dir = test & data = something」。

我的錯誤是什麼?是否有可能優化我的規則?

+0

是應該在那裏的第三條規則? (RewriteRule^test/... – yoavmatchulsky 2011-03-04 21:56:52

+0

是的,我試圖抓住request_uri中的文件名,因爲第二個RewriteRule不匹配。但它是我爲解決問題而添加的第一個RewriteRule,仍然沒有成功... – 2011-03-04 21:58:55

+0

屬於serverfault。這不是一個編程問題,所以它在這裏是無關緊要的。 – 2011-03-04 22:00:13

回答

1

Got it!我必須停用默認激活的MultiView。 MultiView對於調用沒有擴展名的文件很有用。因此http://domain.tld/file被重寫爲file.EXT(文件存儲在服務器上的擴展名)。

如果我調用存儲在服務器上的文件,我的服務器將REQUEST_URI修改爲/file.EXT/subdir/subfile.html。

例如:test.php是一個有效的文件。 http://domain.tld/test/something - > REQUEST_URI:/test.php/something

添加到您的htaccess文件:

Options -MultiViews 

停用它,得到它的工作!