2013-11-12 3 views
2
<ul> 
    <a href="?lang=pt"><li class="pt lang"></li></a> 
    <a href="?lang=en"><li class="us lang"></li></a> 
</ul> 

Если у меня есть URL-адрес, как это:mod_rewrite URL со строкой запроса i18n

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

ответ

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

извините, но результат такой же. – anvd

0

Try:

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

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

<VirtualHost *:80> 
    ServerAdmin [email protected] 
    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' 

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

+0

извините, но нет. url остается с? lang = – anvd

+0

Я просто поменял позиции 1 и 2 доллара, это должно быть правильно. – freedev

+0

, по-видимому, нет, также проблема не такая простая, из-за php-класса. Я буду определять язык в начале и игнорировать проблему. Благодарю. – anvd

Смежные вопросы