mod_rewrite url с строкой запроса i18n

Если у меня есть URL-адрес:

 http://mywebsite/site/https://stackoverflow.com/?lang=en 

С чистым решением mod_rewrite, как я могу расшифровать этот формат?

 http://mywebsite/en/site/ Or http://mywebsite/site/en/ 

Я пытаюсь это сделать, но, видимо, не работает.

 RewriteRule ^/(\w+)/?$ ?lang=$1 

Более подробно: я использую этот class для создания токенов i18n.

https://github.com/Philipp15b/php-i18n


Этот class пытается выяснить язык пользователя, создав очередь из следующих вещей:

  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-адрес, но с использованием этого classа.

 RewriteRule ^/(\w+)(/.*) $2?lang=$1 [QSA] 

Пытаться:

 RewriteEngine On RewriteCond %{THE_REQUEST} \ /(.*)\?lang=([az]{2}) RewriteRule ^/?(.*)$ /%1/$1? [L,R=301] RewriteCond %{REQUEST_FILENAME} !-f RewriteCond %{REQUEST_FILENAME} !-d RewriteRule ^/?([az]{2})/(.*)$ /$2?lang=$1 [L,QSA] 

Это конвертирует запрос uri из /site/en в /site/?lang=en

 RewriteRule ^(/[^/]+/?)(.*) $1?lang=$2 [L,QSA] 

если вы хотите, сначала укажите язык, который вы могли бы попробовать:

 RewriteRule ^/([^/]+)/(.*) /$2/?lang=$1 [L,QSA] 

Это конвертирует запрос uri из /en/site... в /site.../?lang=en

Я пробовал эти перезаписи в vhost с apache 2.2.

  ServerAdmin webmaster@localhost ServerName www.test.org DocumentRoot /var/web/  Options -Indexes FollowSymLinks MultiViews AllowOverride None Order allow,deny allow from all  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]  

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

Также обратите внимание на журнал перезаписи: никогда не включайте его в производственной среде.