簡體   English   中英

重寫規則以在URL中強制使用默認語言代碼

[英]Rewrite Rule to enforce default lang code in URL

我正在使用qtranslate運行WP Blog。 它使我可以創建多種語言的帖子。

1。 不含qtranslate的示例網址:

www.mysite.com/post1

2。 具有本地化內容的示例URL:

www.mysite.com/ zh / post1(英語-我的默認設置和后備廣告)

www.mysite.com/ de / post1

不幸的是,搜索引擎等仍然記得我的舊鏈接(1.),並且這些鏈接仍然可以訪問。 因此,“ www.mysite.com/post1”現在可以顯示我的英語內容,而無需重定向。 但是它應該對301個用戶執行“ www.mysite.com/en/post1”。

因此,現在我需要一個規則,該規則基本上檢查URL中是否存在/ en / post1或/ de / post1,否則重定向到fallback / en / post1 URL。 有一個例外,因為“ / shop ”是一個真實的子目錄,並且不需要在語言信息之前加上。

-更新-

我做的!!! 這實際上很有趣,但花了我一段時間才弄清楚。

RewriteRule ^$ en [R=301,L]
RewriteRule ^([a-z]{2})/{1}$ $1 [R=301,L]
RewriteRule ^([a-zA-Z0-9\-\_]{3,})(/|$)$ en/$1 [R=301,L]

可能有更好的方法可以做到這一點,但是可以解決問題。 感謝大家的初步幫助!

您是否嘗試過使用通用的RewriteRule並使用RewriteConds來消除不希望重寫的情況?

它會像這樣:

RewriteCond %{REQUEST_URI} !^/shop(/|$)
RewriteCond %{REQUEST_URI} !^/(en|de)(/|$)
RewriteRule ^(.*)$ /en/$1 [R=301]

但是根據卡米洛的建議,您可以將中間線更改為

RewriteCond %{REQUEST_URI} !^/[a-z]{2}(/|$)

只要您可以確保發布的永久鏈接不少於三個字符(我對WordPress不太熟悉,以確保是否可行)。

僅使用元規范怎么辦?

像這樣:

<link rel="canonical" href="http://www.example.com/product.php?item=swedish-fish" />

更多信息: http : //googlewebmastercentral.blogspot.com/2009/02/specify-your-canonical.html

我做的!!! 這實際上很有趣,但花了我一段時間才弄清楚。

RewriteRule ^$ en [R=301,L]
RewriteRule ^([a-z]{2})/{1}$ $1 [R=301,L]
RewriteRule ^([a-zA-Z0-9\-\_]{3,})(/|$)$ en/$1 [R=301,L]

可能有更好的方法可以做到這一點,但確實可以

-更新,其中包括對更長URL的支持-

RewriteRule ^([a-zA-Z0-9\-\_]{3,}(/|$).*)$ en/$1 [R=301,L]
RewriteRule ^(.+[^/])/$ http://%{HTTP_HOST}/$1 [R=301,L]

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM