我已經通過.htaccess
隱藏PHP擴展。Mod_rewrite通過htaccess翻譯網站
lang
參數可以是en
或lt
如果lang
參數的值= en
不是應該域一樣,之後添加en/
:
www.mysite.com/register.php?lang=en
- >www.mysite.com/en/register/
如果lang
參數的值= lt
比應像這樣:
www.mysite.com/register.php?lang=lt
- >www.mysite.com/register/
如果其他參數使用,應該是這樣的:
www.mysite.com/etc.php?id=123¶m=abc
- >www.mysite.com/etc/123/abc/
我.htaccess
樣子:
Options +FollowSymLinks -MultiViews
RewriteEngine On
RewriteBase/
# url is ONLY '/en' or '/lt' -> redirect to /en/ or /lt/ (adding slash)
RewriteRule ^(en|lt)$ $1/ [R=301,L]
# now all urls have en/ lt/ -> parse them
RewriteRule ^(en|lt)/(.*)$ $2?lang=$1&%{query_STRING} [L]
# no "R=301" here --------------------------------------^
RewriteCond %{THE_REQUEST} /+(.*?/)?(?:index)?(.*?)\.php[/\s?] [NC]
RewriteRule^%1%2/ [R=302,L,NE]
RewriteCond %{REQUEST_FILENAME}.php -f
RewriteRule ^(.+?)/?$ $1.php [L]
,但現在它的工作不正確:
如果我有www.mysite.com/register.php?lang=en
它將我重定向到www.mysite.com/register/?lang=en
您有什麼想法嗎?
你能有'www.mysite.com/etc.php LANG = EN&ID = 123&PARAM = abc'也?如果是,那麼它應該重定向到哪個URL? – anubhava
@anubhava是的,如果有'lang = en',它應該像這樣:'www.mysite.com/en/...'這樣的域,所以如果你問:'www.mysite.com/烯的/ etc/123/ABC /'。 – Infinity
嗯,這使得重寫工作真的很難,因爲主機名後面的第一部分有時可能是語言代碼或php文件名。在同一個URL的'/ en /'開始處是否也可以有'/ ft /'或'/ de /'或'/ it /'? – anubhava