簡體   English   中英

如何在htaccess Apache中將/en/file.php轉換為file.php?lang = en

[英]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.

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