htaccess эквивалентно PHP _SERVER ['SERVER_NAME']? - PullRequest
0 голосов
/ 28 февраля 2012

Мне нужно динамически ввести текущее имя домена в файл htaccess.Это было бы тривиально в PHP, но я не могу понять, как это сделать в «Apache Speak», и мой Apache-fu слаб.

Для записи, я попробовал это:

SetEnvIfNoCase Referer% {SERVER_NAME} внутренний

и это:

SetEnvIfNoCase Referer% {HTTP_HOST} внутренний

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

SetEnvIfNoCase Referer currentdomain.com internal

Ответы [ 3 ]

1 голос
/ 28 февраля 2012

Попробуйте спросить себя, есть ли другой подход к вашей проблеме?

Если нет простого ответа, скорее всего, существует другой способ выхода из ситуации.

Например, если бы вы могли один раз вставить его динамически и написать .htaccess с помощью php, вы могли бы избавить себя от проблем и, возможно, даже эффективности в вашем коде.

0 голосов
/ 28 февраля 2012

Вы можете сделать это:

SetEnvIfNoCase Referer www\.whateveryourdomain\.com internal

Синтаксис для SetEnvIfNoCase выглядит следующим образом:

SetEnvIfNoCase attribute regex [!]env-variable[=value] [[!]env-variable[=value]] ...

От Apache Docs Атрибут может иметь:

  • поле заголовка HTTP-запроса (для получения дополнительной информации см. RFC2616 );например: Host, User-Agent, Referer и Accept-Language.Регулярное выражение может использоваться для указания набора заголовков запроса.
  • Один из следующих аспектов запроса:
    • Remote_Host - имя хоста (если доступно) клиента, выполняющего запрос
    • Remote_Addr - IP-адрес клиента, отправляющего запрос
    • Server_Addr - IP-адрес сервера, на который был получен запрос (только с версиями более поздними, чем 2.0.43)
    • Request_Method - имя используемого метода (GET, POST и т. Д.)
    • Request_Protocol - имя и версия протокола, с которым был сделан запрос (например, «HTTP / 0.9», «HTTP / 1,1 "и т.См. Директиву RewriteCond для mod_rewrite для получения дополнительной информации о том, как сопоставить строку запроса.
  • Имя переменной среды в списке тех, которые связаны с запросом.Это позволяет директивам SetEnvIf проверять результат предыдущих совпадений.Таким образом, для тестирования доступны только те переменные среды, которые были определены в более ранних директивах SetEnvIf [NoCase].«Ранее» означает, что они были определены в более широкой области (например, для всего сервера) или ранее в области действия текущей директивы.Переменные среды будут рассматриваться только в том случае, если не было совпадений между характеристиками запроса и регулярное выражение не использовалось для атрибута.

То же самое относится к SetEnvIfNoCase.

0 голосов
/ 28 февраля 2012

Нет ни одного. Если вы используете 2.4, тогда вы можете использовать SetEnvIfExpr, но 2.2 или более ранней версии требуют некоторой работы с mod_rewrite.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...