У меня есть следующий код .htaccess:
RewriteEngine on
<if "%{HTTP_HOST} =~ /^helpdesk\./">
RewriteRule ^/?$ /index.php?pages=helpdesk&file=index [NC,L,QSA]
</if>
<if "%{HTTP_HOST} =~ /^account\./">
RewriteRule ^/?$ /index.php?pages=account&file=index [NC,L,QSA]
</if>
Очевидно, это не работает.
Чего я хочу добиться:
когда я иду в http://helpdesk.domain.comфайл index.php должен иметь параметры pages = helpdesk и file = index. Когда я иду в http://account.domain.com файл index.php должен иметь параметры pages = account и file = index.
Когда я заменяю RewriteRule перенаправлением, он работает, но возможно ли этого достичь?
Заранее спасибо!
Редактировать:
задал мой вопрос, как быстро. Это работает.
RewriteEngine on
RewriteCond %{HTTP_HOST} ^helpdesk\..* [NC]
RewriteRule ^/?$ /index.php?pages=helpdesk&file=index [NC,L,QSA]
RewriteCond %{HTTP_HOST} ^account\..* [NC]
RewriteRule ^/?$ /index.php?pages=account&file=index [NC,L,QSA]
Но это правильный путь или есть (лучшая) альтернатива?
То, что вы пытаетесь достичь, возможно с обоими, и ваша текущая рабочая конфигурация является традиционным способом сделать это. Вот почему есть много примеров того, как это сделать с RewriteCond
. В Выражения и директивы If
, ElseIf
, Else
и были представил в Apache 2.4 как долгожданная функция, и один из первых примеров - сделать перезапись более читаемой и предсказуемой:
Для некоторых вещей, для которых вы можете использовать эту директиву, вы использовали mod_rewrite до сих пор, поэтому одним из побочных эффектов этой директивы является то, что мы можем уменьшить нашу зависимость от сложного синтаксиса mod_rewrite в общих ситуациях. В ближайшие месяцы в документацию будет добавлено больше примеров, и у нас будет раздел рецептов со многими из тех же сценариев, что и в разделе рецептов mod_rewrite.
Фактически, большинство наиболее распространенных вариантов использования mod_rewrite теперь можно заменить на
If
директиве, что делает их более удобными для чтения и, следовательно, менее подверженными ошибкам, а также зацикливание перенаправления, которое так часто мешаетRewriteRule
-основанные решения.
Без тестирования я бы сказал, что использование регулярных выражений в вашем варианте использования делает это слишком сложным. Потому что вы сравниваете Host:
заголовки, вероятно, в фиксированном домене, скажем example.com
, вы можете использовать простые ==
(равенство строк) оператор сравнения вместо того =~
(строка соответствует регулярному выражению):
<ifModule mod_rewrite.c>
RewriteEngine on
<If "%{HTTP_HOST} == 'helpdesk.example.com'">
RewriteRule ^/?$ /index.php?pages=helpdesk&file=index [NC,L,QSA]
</If>
<If "%{HTTP_HOST} == 'account.example.com'">
RewriteRule ^/?$ /index.php?pages=account&file=index [NC,L,QSA]
</If>
</ifModule>