Рейтинг:0

Редирект работает, сквозной нет

флаг cn

В нашей CMS есть обработчик с именем корень, который работает: http://example.com/root служит тому, чему мы хотим, чтобы он служил.

Нам нужны запросы на «голый» домен (http://example.com) автоматически обрабатывается тем же обработчиком, не требуя /корень быть частью запроса.

То, что я ожидал "просто сработать" - приводит к 404:

RewriteRule ^/*$ /root [L] # Результат 404

Лучшее, что я могу придумать, это перенаправление, которое раскрывает имя корень:

RewriteRule ^/*$ /root [R=permanent,L] # Работает

Как я могу сделать это без перенаправления? я пытался добавить ПТ но безрезультатно...

флаг us
Я думаю, вам следует вместо этого изменить конфигурацию вашей CMS, чтобы базовый URL-адрес был установлен правильно.Если вы перепишете URL-адреса входящих запросов, CMS по-прежнему будет генерировать URL-адреса с префиксом `/root`, что означает, что вы получите дублированный контент.
флаг cn
Спасибо, но `/root` здесь не каталог и не префикс...
флаг us
То есть статические ресурсы и JS обслуживаются из `/` вместо этого? Как насчет других страниц в `/root`?
флаг cn
Опять же, нет "под"... Запрос example.com/root служит контенту. Мы хотим, чтобы запросы для example.com (с косой чертой или без нее) обслуживались _одинаковым_ контентом...
Рейтинг:1
флаг kz
Правило перезаписи ^/*$ /root [L]

Это нормально, однако, работает ли это, зависит от того, как ваша CMS читает запрошенный URL. CMS, скорее всего, будет считывать первоначально запрошенный URL-адрес (который включен в заголовки HTTP-запроса), а не URL-адрес, который был записан внутри. Итак, CMS видит /, нет /корень. А если не увидит / как действительный маршрут, вы получите 404.

Большинство CMS сломать если они читают переписанный URL-адрес, поскольку большинство CMS используют шаблон переднего контроллера и внутренне переписывают все запросы в общий сценарий («передний контроллер»). Чтение переписанного URL в этом случае бесполезно, поскольку он всегда будет одним и тем же (т.е. URL фронт-контроллера).

Переписывание запрошенного URL таким образом не будет работать с WordPress, Joomla, Drupal и т.д. и т.п.

Только если ваша CMS предоставляет механизм для явного переопределения запрошенного URL-адреса (например, с параметром URL-адреса), вы можете сделать это на уровне сервера, в противном случае вам необходимо настроить этот маршрут в самой CMS. (т.е. желательно изменение URL/маршрут из /корень к /, а не добавлять это как «псевдоним», что потенциально может привести к дублированный контент вопросы.)

флаг cn
Спасибо, это объясняет, почему у нас возникла проблема. Но что касается решения - помимо копания во внутренностях CMS, нет ли какого-то флага для mod_rewrite, который также изменил бы переданный URL (без редиректа)?

Ответить или комментировать

Большинство людей не понимают, что склонность к познанию нового открывает путь к обучению и улучшает межличностные связи. В исследованиях Элисон, например, хотя люди могли точно вспомнить, сколько вопросов было задано в их разговорах, они не чувствовали интуитивно связи между вопросами и симпатиями. В четырех исследованиях, в которых участники сами участвовали в разговорах или читали стенограммы чужих разговоров, люди, как правило, не осознавали, что задаваемый вопрос повлияет — или повлиял — на уровень дружбы между собеседниками.