2011-10-15 107 views
5

我在處理一些應該很簡單的事情時遇到了一些麻煩。我想301將目錄中的所有內容重定向到新位置中的單個文件。將301從一個目錄重定向到一個文件

在我.htaccess,我已經嘗試了以下...

Redirect 301 /myDir/ http://www.mydomain.com/myNewDir/index.html 

這...

Redirect 301 /myDir/ http://www.mydomain.com/myNewDir/ 

這...

Redirect 301 /myDir http://www.mydomain.com/myNewDir 

問題是每個人都簡單地映射01內的每個文件,並將其附加到目標網址的末尾。

谷歌搜索後,我看到的東西,說要做到這一點...

Redirect 301 ^/myDir(.*) http://www.mydomain.com/myNewDir 

但是,這只是做同樣的事情...它映射現有的文件位置的URL的結尾。

很容易在網上找到很多「.htaccess重定向」教程,但它們似乎只顯示了諸如「一對一文件映射」或「一對一目錄映射」的明顯例子。這些教程似乎也忽略瞭解釋各種相關的文件指令以及如何正確使用它們。

此特定的託管帳戶是垃圾並且還安裝了FrontPage擴展。修改重寫失敗(打破整個站點),但Redirect 301線路正常運行。因此,直到我可以將這個新的(非FrontPage)網站遷移到更強大的主機帳戶,我需要堅持使用Redirect 301單行。


我怎麼能簡單地用一個Redirect 301一切/myDir/重定向到位於/myNewDir/index.html同一個文件? (如果可能,我寧願只使用/myNewDir/)。 請詳細解釋您的解決方案中使用的文件指令。


UPDATE:

以前接受的答案是行不通的。

例子:

RedirectMatch 301 /myDir1/(.*) http://mydomain.org/newpath/myDir1/index.html 

...是給「重定向過多發生試圖打開」錯誤。

這是因爲/myDir1/(.*)是字符串中的匹配任何地方因此,如果目標URL中包含/myDir1/的任何地方,而不僅僅是根,它會被重定向到一個討厭的循環。

查看我自己發佈的答案以獲得正確的解決方案。

回答

12

我在其中一箇舊項目中找到了答案。

Redirect 301對此都是錯誤的。我真的想要RedirectMatch 301

RedirectMatch 301 ^/myDir/(.*) http://www.mydomain.com/myNewDir/ 

說明(S):

http://httpd.apache.org/docs/1.3/mod/mod_alias.html#redirectmatch

「該指令相當於重定向,但利用標準 正則表達式,而不是簡單的前綴匹配」

http://www.zytrax.com/tech/web/regex.htm

「方括號外的^(彎曲或插入符號)是指僅看 目標字符串的開頭,例如,^運會找不到 的Windows中STRING1但^ Moz會找到Mozilla。「

和...

「。(句)是指在這個位置上的任何字符(S),例如, 噸。會發現噸,語氣和行李箱而不是肆意因爲它沒有 以下字符。「

和...

*(星號或星)前面的字符匹配0或更多 倍,例如,唱到tre會發現樹(2次)和胎面( 1次) 和低谷(0次)*

+0

很好,謝謝。這開始讓我發瘋。這適用於將整個目錄(每頁內)的內容引導到給定頁面。 – Tom

+0

另外值得一提的是,如果您之前有301重定向到錯誤的位置(將頁面附加到目標URL),您可能需要清除瀏覽器緩存,然後才能從.htaccess獲取新規則。 – Russ

1

試試這個:

RedirectMatch 301 /myDir/.* http://www.mydomain.com/myNewDir/index.html 

參考:http://httpd.apache.org/docs/1.3/mod/mod_alias.html#redirectmatch

至於括號。*而言,RedirectMatch使用標準正則表達式,這意味着你可以捕獲匹配的字符,並利用它們在你的重定向規則refferencing他們爲$ 1,$ 2等

在常規表達式*表示前一個字符的任意數量的重複。 。 - 表示任何字符。所以組合*表示這個模式匹配任意數量的任何字符。因此*。 *表示此模式將匹配/ myDir和/ myDir /,仍然是/myDir/test.html。所以*。 *也可以使用

+0

是的,那是有效的。我知道'。*'匹配所有文件。但你能擴展一下嗎?任何變化?爲什麼'(。*)'也起作用?在線文檔的鏈接?謝謝! – Sparky

+0

請參閱:http://httpd.apache.org/docs/1.3/mod/mod_alias.html#redirectmatch關於括號。* RedirectMatch使用標準正則表達式,這意味着您可以捕獲匹配的字符並將它們用於您的重定向規則中,將它們引用爲$ 1,$ 2等。 – dfsq

+0

在正則表達式中*表示前一個字符的任意數量的重複。 '.' - 表示任何字符。所以組合*表示這個模式匹配任意數量的任何字符。因此*。 *表示此模式將匹配/ myDir和/ myDir /,仍然是/myDir/test.html。所以*。 *也可以使用。 – dfsq

相關問題