我已经通过.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