RewriteRule соответствует родительской папке при внутреннем перенаправлении - PullRequest
0 голосов
/ 09 апреля 2019

Я пытаюсь перенаправить все URL-адреса одной страницы блога в шаблон PHP.

/ blog / blog-post-1 будет указывать маршрут к index.php из / blog /, но сохранит URL-адрес существующего слага для извлечения данных.

Базовый маршрутизатор действительно только для папки блога.

Однако родительская папка / blog / также, похоже, совпадает. Я хочу, чтобы только страницы для одного / детей соответствовали.

Я попробовал несколько htaccess RewriteRules и протестировал их на сайте проверки регулярных выражений, а также на сайте соответствия htaccess.

Внутреннее перенаправление кода, приведенное ниже, похоже, работает на этих сайтах, но на моем локальном хосте оно также соответствует родительской странице.

RewriteRule ^blog/(.+)$ / [L,NC]

Это также соответствует родительской странице (/ blog /) и также возвращается на домашнюю страницу.

Однако, если я выполню это как фактическое перенаправление

RewriteRule ^blog/(.+)$ / [R,L,NC]

Работает как положено и работает только на детей. Единственная проблема заключается в том, что он удаляет существующий URL.

Я ожидал, что первый редирект сработает и перенаправит только дочерние страницы, но на самом деле он соответствует всем.

Добавление флага R и его фактическое перенаправление, кажется, работает.

Не уверен, что я что-то упустил?

1 Ответ

0 голосов
/ 10 апреля 2019

После включения журнала mod_rewrite я обнаружил, что apache2 циклически просматривает возможные URL-адреса для этого пути.

Таким образом, он будет проверять:

blog / blog / index.html blog / index.php

Последним является фактический путь, который также соответствует правилу htaccess.

Я обновил правила до:

RewriteCond %{REQUEST_FILENAME} !-d
RewriteCond %{REQUEST_FILENAME} !-f
RewriteRule ^blog/(.+)$ / [L,NC]

Чтобы убедиться, что запрошенный URL-адрес не существуетЭто уже файл или каталог.

Кажется, чтобы сделать работу.Я уверен, что есть другие правила Cond, которые могут помочь.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...