.htaccess rewriterule if/else

У меня есть следующий код .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, индекс.php файл должен получить параметры pages=helpdesk и file=index. Когда я перехожу в http://account.domain.com индекс.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]

Но является ли это правильным способом или есть (лучшая) альтернатива?

2
задан 14 July 2018 в 14:00
1 ответ

То, что вы пытаетесь достичь, возможно с обоими, и ваша текущая рабочая конфигурация является традиционным способом сделать это. Вот почему есть множество примеров того, как это сделать с 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>
0
ответ дан 3 December 2019 в 13:55

Теги

Похожие вопросы