2
<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

基本上,我想要的是一个友好的 url,但使用这个类。

4

3 回答 3

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]
于 2013-11-13T02:40:26.223 回答
0
RewriteRule ^/(\w+)(/.*) $2?lang=$1 [QSA]
于 2013-11-12T22:59:58.190 回答
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 的虚拟主机中尝试了这些重写。

<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'

还请注意重写日志:永远不要在生产环境中启用它。

于 2013-11-21T22:44:05.490 回答