Проблемы с перенаправлением .htaccess в подкаталогах - PullRequest
1 голос
/ 04 августа 2020

Я пытаюсь перенаправить следующее ...

.. и это отлично работает ..

RewriteCond %{REQUEST_URI} !^/blog/news 
RewriteRule ^blog/(.*) /blog/news/$1 [QSA,L,R=301]

Прекращает бесконечное перенаправление l oop ...

Однако мне не нужен URL ..

http://example.com/blog/ 

для перенаправления куда угодно, так как это моя целевая страница, на которой перечислены все записи блога ... На данный момент я получаю здесь бесконечное l oop.

http://example.com/blog/news/news/news/news/news/news/news/news/news/news/news/news/news/news/news/news/news/news/

Я попытался добавить еще одно условие, чтобы остановить перенаправление страницы root ...

RewriteCond %{REQUEST_URI} !^/blog/$

но это не работает ...

FYI

Вот мой полный .htaccess файл

# BEGIN WordPress
# The directives (lines) between `BEGIN WordPress` and `END WordPress` are
# dynamically generated, and should only be modified via WordPress filters.
# Any changes to the directives between these markers will be overwritten.
<IfModule mod_rewrite.c>
RewriteEngine On
RewriteBase /
RewriteRule ^index\.php$ - [L]
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule . /index.php [L]
</IfModule>

# END WordPress

RewriteCond %{REQUEST_URI} !^/blog/news 
RewriteRule ^blog/(.+) /blog/news/$1 [L,R=301]

Есть идеи?

Ответы [ 2 ]

0 голосов
/ 05 августа 2020

Спасибо всем за вашу помощь ... Я решил эту проблему, изменив новый путь root, поэтому конфликта нет, и мои перенаправления теперь работают нормально. Я думаю, что проблема, с которой я столкнулся, на самом деле была связана с маршрутами кэшированных URL-адресов в Chrome, которые все еще происходят в режиме Incog, поэтому, несмотря на то, что я вносил изменения, меня все еще перенаправляли к предыдущим настройкам.

0 голосов
/ 05 августа 2020
RewriteCond %{REQUEST_URI} !^/blog/news 
RewriteRule ^blog/(.*) /blog/news/$1 [QSA,L,R=301]

Эти директивы не должны вызывать перенаправление l oop при запросе /blog/, однако они перенаправят вас на /blog/news/. Чтобы предотвратить это нежелательное перенаправление, вы можете просто изменить подшаблон .* (0 или больше) на .+ (1 или больше), чтобы он соответствовал /blog/<something>, а не /blog/<anything>.

В других слова:

RewriteCond %{REQUEST_URI} !^/blog/news 
RewriteRule ^blog/(.+) /blog/news/$1 [L,R=301]

Флаг QSA здесь не требуется, поскольку вы не добавляете строку запроса в строку подстановки .

ОБНОВЛЕНИЕ: Вы поместили директивы не в то место - они должны go перед секцией # BEGIN WordPress, в самом верху вашего .htaccess файла. Если поместить их в конец, они просто не будут обработаны.

Однако это все еще не причина перенаправления l oop.

Однако вы делаете необходимо убедиться, что вы очистили кеш браузера. Любые ошибочные 301-е (возможно, во время тестирования) будут постоянно кэшироваться браузером. Первый тест с 302 (временными) перенаправлениями, чтобы избежать проблем с кешированием.

...