Назад | Перейти на главную страницу

How should I use the <if> директива в .htaccess?</if>

Я пытаюсь добавить условный оператор с помощью директивы Apache If в мой файл .htaccess.

Я сослался на эту страницу http://httpd.apache.org/docs/trunk/mod/core.html#if но он не особо подробно описывает / дает много примеров. В нем приводятся два неполных примера:

<If %{REQUEST_METHOD} IN GET,HEAD,OPTIONS> 

и

<If "$req{Host} = ''"> 

Итак, я попытался добавить это в свой файл .htaccess:

<If %{SERVER_PORT} IN GET,HEAD,OPTIONS>
   #nothing here yet
</If>

Но я продолжаю получать Ошибка 500 когда я пытаюсь загрузить страницу. Это моя локальная установка, и раньше она работала нормально (или если я удалю этот код). Я считаю, что у меня есть AllowOverride All настраивается глобально, и контекст для директивы If должен позволять ей присутствовать в .htaccess («Контекст: конфигурация сервера, виртуальный хост, каталог, .htaccess»).

Может ли кто-нибудь дать мне несколько примеров того, как правильно использовать директиву <If>, или некоторые рекомендации относительно того, почему она не работает для меня?

Спасибо!

<If> доступен только в Apache 2.4+, поэтому сначала убедитесь, что у вас есть эта версия.

Примеры

# Compare the host name to example.com and redirect to www.example.com if it matches
<If "%{HTTP_HOST} == 'example.com'">
  Redirect permanent "/" "http://www.example.com/"
</If>

<If "%{HTTP_HOST} =~ /regex/">
  SecFilterEngine Off
  SecFilterScanPOST Off
</If>

<If "%{REQUEST_URI} =~ m#/regex/including/slashes/#">
  SecFilterEngine Off
  SecFilterScanPOST Off
</If>

Альтернативы <If>

Есть несколько других решений для выполнения условных операторов в Apache 2.2, если вы все еще придерживаетесь этого.

  • Вы можете установить переменные среды с помощью:

    • Конфигурация Apache
    • SetEnvIf
    • mod_rewrite's RewriteMatch
  • Затем вы можете выполнять условные операторы, используя

    <IfDefine MyEnvironmentVar>
       ...
    </IfDefine>
    

Пример:

# Set environment variable if we're on staging site
SetEnvIf Host staging ROBOTS_NOINDEX

# Set environment variable if we're within a specific folder
SetEnvIf Request_URI ^/app/webroot/files/ ROBOTS_NOINDEX

# Send custom header if environment variable is set
Header set X-Robots-Tag "noindex" ENV=ROBOTS_NOINDEX

В <If> Директива доступна только в Apache 2.4+, но не в версии 2.2 или более ранней.

http://httpd.apache.org/docs/2.4/mod/core.html#if

Документация, отсутствующая в 2.2:

http://httpd.apache.org/docs/2.2/mod/core.html#if