Apache-2.2

通過 mod-rewrite 重定向,僅使用 apache htaccess

  • December 3, 2010

大家好,關於mod-rewrite的問題。當使用者輸入/somepage?ln=xx我的伺服器時,我的伺服器會隱形載入/xx/somepage,這是一個非常漂亮的 url。

但是,那些醜陋的頁面仍然會重新出現記憶體,我只是希望它們永久重定向到漂亮的 url。所以它們會消失,只剩下美麗的網址。

/somepage?ln=xx應該永久 301 重定向到/xx/somepage 該頁面,然後將不可見地載入頁面而不會顯示醜陋的 url。當沒有設置語言時,假設為英語: /somepage應該重定向到/en/somepage

在這兩種情況下,文件副檔名都應該是可選的(例如應該使用和不使用各種副檔名).php .htm .pag,換句話說,如果這些 url 有它們,所有 3 字元副檔名也應該工作)。

/contact?ln=xx或**/contact.zzz?ln=xx**

應該都去 /xx/contact

語言只有 2 個字元。我現在擁有的:

# make language as a /lang/page like /xx/contact  WORKS
RewriteRule ^([a-z][a-z])/(.*) /$2?ln=$1 [L]

# when no page, only language set, go to root /nl or /nl/  WORKS
RewriteRule ^([a-z][a-z])/?$ /$1/home [R=301,L]

# permanently redirect ugly urls to nice ones, so the ugly ones dissappear
RewriteRule ???

所以你將醜陋的 URL 重定向到好的 URL,然後再次重寫它?

我認為這裡的技巧是使用 RedirectMatch 而不是 RewriteRule (檢查你是否載入了模組):

RedirectMatch 301 /(.*)?ln=([a-z][a-z]) http://example.com/$2/$1

但是,我真的不知道當您實際上是在創建一個循環時它的表現會有多好。它應該可以工作,因為該Redirect部分指示瀏覽器請求“漂亮”的 URL,但伺服器隨後會悄悄地將Rewriting它返回給“醜陋”的 URL 進行處理。

關鍵是,如果重寫後的 URL 再次被重定向處理,你的伺服器可能會內爆成一個迷你黑洞。我不知道。

(為清楚起見進行了編輯。)

引用自:https://serverfault.com/questions/208864