[英]How to translate /en/file.php to file.php?lang=en in htaccess Apache
我正在寫多語言網站。 我在服務器上有幾個文件,例如:
/index.php
/files.php
/funny.php
並希望通過將語言代碼放入URL中來添加語言支持,如下所示:
http://mywebsite/en/index.php
將重定向到:
http://mywebsite/index.php?lang=en
和
http://mywebsite/en/files.php
將重定向到:
http://mywebsite/files.php?lang=en
我想舉例說更多的語言:
http://mywebsite/ch-ZH/index.php
我希望這僅適用於具有php和php5擴展名的文件。 其余文件應與它們相同。
因此,例如,當我要去地址時
http://mywebsite/ch-ZH/index.php
我希望我的PHP能夠識別當前路徑是
http://mywebsite
並不是
http://mywebsite/ch-ZH
這對我來說是必要的,因為在我的PHP代碼中,我涉及當前路徑,並希望它們在現在正常工作。
您能否寫出如何在Apache上准備htaccess文件以滿足這個條件?
嘗試這個:
RewriteEngine on
RewriteRule ^([a-z]{2}(-[A-Z]{2})?)/(.*) $3?lang=$1 [L,QSA]
對於當前路徑問題,您必須知道如何解析相對URI:相對URI 由客戶端從基本URI解析,該基本URI是當前資源的URI( 不是文件系統路徑! ),除非另外聲明。
因此,如果文檔中包含URI /en/foo/bar
和相對路徑./baz
,則客戶端 ./baz
其解析為/en/foo/baz
(顯然,客戶端不知道實際的文件系統路徑)。
為了將./baz
解析為/baz
,您必須更改基本URI,這可以通過HTML元素BASE
。
這樣的事情應該可以解決問題,
RewriteEngine on
RewriteRule ^(.[^/]+)/(.*).php([5])?$ $2.php$3?lang=$1 [L]
這只會匹配.php和.php5文件,因此其余文件不會受到影響。
如果不想使用ModRewrite,可以將符號鏈接放在Web文件夾( ln -s . en
)中,並檢查PHP中的URL。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.