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