htaccess переписать страну без поддоменов

htaccess переписать страну без поддоменов

мне нужно переписать 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]

но они не сработали.

так... есть ли способ это сделать?

решение1

Вы не можете «переписать» 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ссылка содержит поддомен (в данном примере «us» или «eg») из запрошенного имени хоста.

Дополнительным условием проверки строки запроса на отсутствие параметра country=URL является предотвращение цикла перезаписи.

Однако вы ничего не указали о URL-пути? И вы должны переписывать напрямую в файл, который обрабатывает запрос ( index.php?). В своем текущем состоянии указанное выше "переписывание" зависит от mod_dir, создающего дополнительный подзапрос для DirectoryIndex.


  1. RewriteRule (US|EG) ?c=$1 [NC , L]
  2. RewriteRule :\/\/(.*?).example.com ?C=$1 [NC , L]

В этих директивах есть многочисленные ошибки:

  • Вы говорите, что пробовали это, однако, ошибочноепространствавфлагиаргумент приведет к немедленной внутренней ошибке сервера 500 при первом анализе файла.
  • Как уже упоминалось выше,RewriteRule шаблон(первый аргумент) соответствует только URL-пути. Это не включает имя хоста.
  • Регулярное выражение в #1 слишком общее и соответствует «US» или «EG».в любом месте.
  • Чтобы сопоставить абсолютный URL (что вы, по-видимому, пытаетесь сделать во втором примере), вам нужно будет сопоставить THE_REQUESTпеременную сервера (которая содержит первую строку заголовков запроса, включая запросметод).

Связанный контент