мне нужно переписать URL из
us.example.com
к
example.com?country=us
без поддоменов
Я попробовал эти 2 правила:
1.
RewriteRule (US|EG) ?c=$1 [NC , L]
2.
RewriteRule :\/\/(.*?).example.com ?C=$1 [NC , L]
но они не работали.
так .. есть ли способ сделать это?
Вы не можете «переписать» URL-адрес для разных имен хостов (вам потребуется реализовать обратный прокси), и я предполагаю, что «перенаправление» нежелательно.
Однако, если все поддомены и основной домен указывают на одну и ту же область файловой системы, вам не нужно менять имя хоста / домен. Все, что требуется - это обычная перезапись (на том же хосте).
Для проверки поддомена на запрашиваемом хосте необходимо условие (RewriteCond
директива), которая проверяет соответствие HTTP_HOST
серверная переменная (т. е. значение Host
Заголовок HTTP-запроса). В RewriteRule
шаблон совпадает только с частью URL-пути URL-адреса.
Например:
RewriteEngine On
RewriteCond %{QUERY_STRING} !^country=
RewriteCond %{HTTP_HOST} ^(us|eg)\.example\.com [NC]
RewriteRule ^ /?country=%1 [L]
Как отмечалось выше, предполагается, что поддомены и основной домен указывают на одну и ту же область файловой системы. Это обычное дело в системе, где все запросы управляются одной CMS. (И вы не пытаетесь изменить имя хоста в своих примерах директив.)
В %1
backreference содержит поддомен (в данном примере «us» или «eg») запрошенного имени хоста.
Дополнительное условие, которое проверяет строку запроса на отсутствие country=
Параметр URL предназначен для предотвращения цикла перезаписи.
Однако вы ничего не указали про URL-путь? И вы должны переписывать прямо в файл, обрабатывающий запрос (index.php
?). В своем текущем состоянии вышеуказанная «перезапись» зависит от того, что mod_dir делает дополнительный подзапрос для DirectoryIndex.
RewriteRule (US|EG) ?c=$1 [NC , L]
RewriteRule :\/\/(.*?).example.com ?C=$1 [NC , L]
Эти директивы содержат множество ошибок:
RewriteRule
шаблон (первый аргумент) соответствует только URL-пути. Это не включает имя хоста.THE_REQUEST
переменная сервера (которая содержит первую строку заголовков запроса, включает запрос метод).