2012-03-26 2 views
0

Я пытаюсь соответствовать определенным правилам Только тогда, когда нет «локаль» в строке запросаHTAccess состояние

Вот как я это делаю:

RewriteCond %{QUERY_STRING} !locale 
RewriteRule ^acceuil$ home.php?locale=fr [NC,L] 
... (More rewrite rules) 

В основном я хочу /acceuil, чтобы перейти к home.php?locale=fr (работа идеально)

Кроме того, что если какой-то образом ссылка была как этот /acceuil?locale=en я хотел бы сделать его вместо того, чтобы /home что эквивалентно home.php?locale=en

Любой шанс переписать позволяет сказать «/acceuil» следующим образом:

if(isset($locale)) { 
     go to home.php?locale=$locale 
} 
else{ 
     go to home.php?locale=fr 
} 

Также мне интересно, если условие должно быть копия вставить перед каждым правилом?

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

Благодарности

+0

Если это французский, то это '' Accueil' **, * not * 'Acceuil' :) –

ответ

1

Вот общее правило, которое должно работать, и что делает, что переменная в GET является locale (не localeee ни llllocale):

RewriteCond %{QUERY_STRING} (^|&)locale=([a-zA-A]+)(&|$) 
RewriteRule ^acceuil$ home.php?locale=%1 [L,NC,QSA] 

# if locale = en ... 
RewriteCond %{QUERY_STRING} (^|&)locale=en(&|$) 
# ... and it goes to home.php then go back to /home: 
RewriteRule ^home.php$ /home [L,NC,QSA] 

Примечание: если это французский, то это Accueil, не Acceuil :)

+0

спасибо, что я ценю вашу помощь и THX за то, что вы ловили опечатку :) –

+0

приветствую, мое удовольствие ** ':)' ** –

1
RewriteCond  %{QUERY_STRING} !locale 
RewriteRule  ^acceuil$    home.php?locale=fr [L,NC] 
RewriteCond  %{QUERY_STRING} locale=([a-zA-Z]{2}) 

RewriteRule  ^acceuil$    home.php?locale=%1 [L,NC] 

Edit:
Первое условие только проверит наличие local в строке запроса. Если это не так, перепишите URL-адрес на home.php?locale=fr, и если есть locale=, он принимает все, что после этого (всего два символа), и поместите их в home.php?locale=%1, так acceuil?locale=fr означает home.php?locale=fr. И acceuil?locale=en означает home.php?locale=en.

Есть два условия и два правила переписывания: -D

+0

благодарит за быстрый ответ! По этой логике я понял, что условия применяются ТОЛЬКО к одному правилу, верно? –

+0

прочитанное добавлена ​​часть – undone

+0

спасибо! очень сложно подобрать лучший ответ –

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