2011-08-18 52 views
0
Options +FollowSymLinks 
RewriteEngine On 
RewriteRule ^mocks/site/(.*)$ http://thelivewebsite.com/$1 [R=301,L] 

這是我的htaccess文件的內容。當(。*)爲空時停止mod_rewrite返回REQUEST_URI

htaccess文件位於主機帳戶的根目錄中,我只是想將目錄mocks/site/重定向到新域(有或沒有任何額外的目錄)。

例如:如果有人去http://mywebsite.com/mocks/site那麼它需要重定向到http://thelivewebsite.com。如果他們去http://mywebsite.com/mocks/site/another/directory那麼它需要重定向到http://thelivewebsite.com/another/directory。我希望這是有道理的。

所以我的問題是,上面的代碼htaccess的看來,然後在重定向的$1似乎引用整個REQUEST_URI後mocks/site/後,工作得很好,當有一些然而,當有不是(如:而不是什麼 - 因爲它後面什麼也沒有)。

我不知道如何阻止這一點。我想過使用RewriteCond,但我不確定在那裏使用什麼。我找不到任何有助於我確定mocks/site/之後是否有任何內容。

任何幫助將不勝感激。

謝謝。

回答

1

這就是很奇怪行爲 - 從來沒有見過類似的東西。因此,我認爲它可能是別的東西(另一個規則 - 在舊的甚至是新的網站上)。我建議啓用重寫調試(RewriteLogLevel 9)並檢查重寫日誌(如果可以的話,可以編輯Apache的配置文件/虛擬主機定義)。

在任何情況下,試試這個組合

Options +FollowSymLinks 
RewriteEngine On 

RewriteRule ^mocks/site/$ http://thelivewebsite.com/ [R=301,L] 
RewriteRule ^mocks/site/(.+)$ http://thelivewebsite.com/$1 [R=301,L] 

它會做配套/ 2個步驟重定向:第一條規則是精確匹配目錄(所以沒有$1在所有涉及)和2將工作如果在/mocks/site/之後至少有1個字符。

或者(Apache的文檔甚至建議這個)使用Redirect指令(在所有for such simple redirects不需要mod_rewrite的):

Redirect 301 /mocks/site/ http://thelivewebsite.com/ 
+0

輝煌,謝謝你,你的第一個建議幫助。 :)如果之後沒有任何東西,它會先重定向。重定向指令似乎沒有做任何事情,所以我可能做錯了,但它確定第一個工作正常。 –

相關問題