2
<ul>
   <a href="?lang=pt"><li class="pt lang"></li></a>
   <a href="?lang=en"><li class="us lang"></li></a>
</ul>

次のような URL がある場合:

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

これはリクエスト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'

ログの書き換えにも注意してください。本番環境では決して有効にしないでください。

于 2013-11-21T22:44:05.490 に答える