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

Поддомен Apache mod_rewrite и аргументы URL

Я пытаюсь написать Apache mod_rewrite, который может принимать информацию из поддомена и после домена и передавать ее как пару переменных в сценарий PHP.

Вот что у меня есть до сих пор, с этим я могу получить либо субдомен, либо аргументы URL.

RewriteEngine On

RewriteCond %{HTTP_HOST} ^([^./]+)\.domain\.com/([a-zA-Z0-9/-]+)$
RewriteCond %1 !=www
RewriteRule ^ redirect.php?subdomain=%1&args=$2

RewriteRule ^/?([a-zA-Z0-9/-]+)$ redirect.php?args=$1 [L]

mod_rewrite включен, и мы используем A-запись с подстановочными знаками, чтобы направлять весь трафик на этот сервер * .domain.com

Кроме того, я прошу прощения, если это опубликовано в другом месте, я пытался решить эту проблему в течение последнего месяца и не понял этого, или нашел ответ, опубликованный где-либо.

Как уже упоминал Шейн Мэдден, первая RewriteCond не похоже, что это будет соответствовать чему-либо. Причина двоякая: во-первых, первый . не экранирован и, во-вторых, переменная% {HTTP_HOST} не содержит косой черты, поэтому весь раздел после domain\.com ничего не будет совпадать.

RewriteCond %{HTTP_HOST} ^([^./]+)\.domain\.com/([a-zA-Z0-9/-]+)$


Я никогда раньше не использовал% 1 в левой части RewriteCond. Если вы не уверены, что это работает, если у вас возникнут другие проблемы, попробуйте удалить эту строку, чтобы устранить ее как возможную причину. Также не должно быть = войдите там. Просто !www это то, что вы хотите здесь. Если у вас есть проблемы с этой строкой, измените ее, чтобы использовать %{HTTP_HOST} переменная вместо% 1.

RewriteCond %1 !=www


В $2 при подстановке этого RewriteRule не имеет подходящего набора скобок в шаблоне, поэтому он будет пустым. Возможно, вы захотите добавить к этому более крупный узор. Если у него есть только один подходящий набор скобок, $ 1 будет тем, что вам нужно, даже если у вас уже есть% 1 в замене. Я подозреваю, вы тоже захотите сделать это /redirect.php... если вы делаете это в файлах конфигурации, а не в .htaccess.

RewriteRule ^ redirect.php?subdomain=%1&args=$2

Кроме того, я мог бы добавить, что сопоставление просто ^ склонен к образованию петель. Будьте осторожны с этим.