Apache-2.2
如何僅使用 htaccess 和 apache 從 /page 重寫到 /xx/page?
想像一個三步跳體育賽事,前兩步完美到位,第三步發射到空中,永遠不會回來,最終崩潰!這就是這個問題歸結為:)
/somepage?ln=xx
第 1 步:當使用者導航到 時,WORKS服務/xx/somepage
。# if user inputs nice urls /xx/somepage to serve page /someapge?ln=xx RewriteRule ^([a-z][a-z])/(.*) /$2?ln=$1 [L]
第 2 步:當只給出語言時,WORKS轉到首頁 /xx/
# if language xx given but no page given? then redirect to its home /xx/home RewriteRule ^([a-z][a-z])/?$ /$1/home [R=301,L]
第 3 步:崩潰
# if user inputs /somepage then redirect to default english: /en/somepage # if user inputs /somepage?ln=xx redirect to nice url /xx/somepage RewriteCond %{REQUEST_URI} !^/../ [NC] RewriteRule ^(.*)$ /en/$1 [R=301,L]
第三條規則是我們被卡住的地方…… PS:重定向應該適用於無副檔名文件somepage?ln=xx以及副檔名somepage.abc?ln=xx的文件,其中副檔名可以是任何 2 或 3 個字元- word,或者如果更簡單,請使用我使用的以下副檔名手動檢查
$$ .php .uu .u3c .vls $$ 感謝一千!
這確實有效(經過測試):
RewriteCond %{REQUEST_URI} !^/../ [NC] RewriteRule ^(.*)$ /en$1 [R=301,L]
Apache Mod_Rewrite 文件、重寫指南和高級重寫指南。
編輯:
測試了上面的(它和以前一樣);適用於我的 Apache 2.2 伺服器。
編輯2:
應該沒問題,只需要這樣的東西:
# If just the language is specified (ie example.com/en) RewriteCond %{REQUEST_URI} ^/..$ [NC] RewriteRule ^(.*)$ $1/ # If no language subfolder, default to 'en' RewriteCond %{REQUEST_URI} !^/../ [NC] RewriteRule ^(.*)$ /en$1 [R=301] # If no page specified, default to home. RewriteCond %{REQUEST_URI} !^/../.+ [NC] RewriteRule ^/(..) /$1/home.html [R=301] # If no ln query, tack it on RewriteCond %{QUERY_STRING} !ln= [NC] RewriteRule ^/(..)/(.*) /$1/$2?ln=$1 [R=301]
注意:請注意您的 404 頁面可以正常工作。如果它不是無效的連結將結束在一個無限循環(即,404 頁面不會工作)。
注意 2:如果使用者輸入
example.com/en
,他們將被重定向到example.com/en/en?ln=en
,因此請確保尾部斜杠在 URL 中,否則。注意 3:如果你願意,你可以
[R=301]
從最後一條規則中刪除,然後使用者將看到example.com/en/home.html
對頁面的請求實際上是example.com/en/home.html?ln=en
. 但是,如果您的站點使用 GET 請求,這將不起作用。編輯 3:
添加了另一個條件/規則對來擷取是否有人只輸入語言,而沒有尾部斜杠。