【发布时间】:2017-10-26 08:05:28
【问题描述】:
我已经通过 .htaccess 隐藏 PHP 扩展。
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&param=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 是的,总是如果有
lang=en它应该像这样的域:www.mysite.com/en/...所以如果你问过:www.mysite.com/en/etc/123/abc/。 -
嗯,这使得重写工作变得非常困难,因为主机名之后的第一部分有时可以是语言代码或 php 文件名。
/ft/或/de/或/it/也可以在同一个 URL 中与/en/相同的开头吗? -
只有 2 种语言 -
lt或en,但lt是默认的,我的域确实像mysite.lt所以如果lt语言我不需要添加它。如果lt语言那么www.mysite.lt/etc/如果en然后www.mysite.lt/en/etc/。 -
@anubhava 好的,感谢您的帮助。
标签: php apache .htaccess redirect mod-rewrite