<ul>
<a href="?lang=pt"><li class="pt lang"></li></a>
<a href="?lang=en"><li class="us lang"></li></a>
</ul>
如果我有这样的网址:
http://mywebsite/site/?lang=en
使用纯mod_rewrite解决方案,我该如何转录为这种格式?
http://mywebsite/en/site/ Or http://mywebsite/site/en/
我正在尝试这个,但显然不起作用。
RewriteRule ^/(\w+)/?$ ?lang=$1
更多详细信息:我正在使用此类生成i18n令牌。
https://github.com/Philipp15b/php-i18n
此类尝试通过生成以下内容的队列来查找用户语言:
Forced language (if set)
GET parameter 'lang' ($_GET['lang'])
SESSION parameter 'lang' ($_SESSION['lang'])
HTTP_ACCEPT_LANGUAGE (can be multiple languages) ($_SERVER['HTTP_ACCEPT_LANGUAGE'])
Fallback language
基本上,我想要的是一个友好的网址,但是使用这个课程。
答案 0 :(得分:0)
RewriteRule ^/(\w+)(/.*) $2?lang=$1 [QSA]
答案 1 :(得分:0)
尝试:
RewriteEngine On
RewriteCond %{THE_REQUEST} \ /(.*)\?lang=([a-z]{2})
RewriteRule ^/?(.*)$ /%1/$1? [L,R=301]
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule ^/?([a-z]{2})/(.*)$ /$2?lang=$1 [L,QSA]
答案 2 :(得分:0)
这会将请求uri从/site/en
转换为/site/?lang=en
RewriteRule ^(/[^/]+/?)(.*) $1?lang=$2 [L,QSA]
如果您想要首先使用您可以尝试的语言:
RewriteRule ^/([^/]+)/(.*) /$2/?lang=$1 [L,QSA]
这会将请求uri从/en/site...
转换为/site.../?lang=en
我在使用apache 2.2的vhost中尝试过这些重写。
<VirtualHost *:80>
ServerAdmin webmaster@localhost
ServerName www.test.org
DocumentRoot /var/web/
<Directory /var/web/>
Options -Indexes FollowSymLinks MultiViews
AllowOverride None
Order allow,deny
allow from all
</Directory>
ErrorLog /var/log/apache2/www.test.org_error.log
# Possible values include: debug, info, notice, warn, error, crit,
# alert, emerg.
LogLevel warn
CustomLog /var/log/apache2/www.test.org_access.log combined
RewriteEngine On
RewriteLogLevel 8 # set to 0 in production
RewriteLog /var/log/apache2/www.test.org_rewrite.log
RewriteRule ^(/[^/]+/?)(.*) $1?lang=$2 [L,QSA]
</VirtualHost>
在rewrite.log中我看到:
(2) init rewrite engine with requested uri /site/en
(3) applying pattern '^(/[^/]+/?)(.*)' to uri '/site/en'
(2) rewrite '/site/en' -> '/site/?lang=en'
请注意重写日志:永远不要在生产环境中启用它。