htaccess 301 перенаправляет подкаталог на один уровень глубже - почему это не работает? - PullRequest
0 голосов
/ 08 февраля 2012

это, вероятно, глупый вопрос, но у меня есть реальные проблемы с выяснением, как перенаправить

/ products to / products / item

Это простое перенаправление, не требуется регулярное выражение.Сайт / продукты верхнего уровня должен просто всегда перенаправлять на / products / item

Я пытался:

<IfModule mod_rewrite.c>
RedirectMatch 301 /products(.*) /products/item/$1
</IfModule>

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

# Custom Rules
<IfModule mod_rewrite.c>
RedirectMatch 301 /products(.*) /products/item/$1
</IfModule>

# BEGIN WordPress
<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

Но самое странное: когда я загружаю страницу, я получаю сообщение об ошибке.Когда я нажимаю перезагрузить, это работает ??? 1013

Спасибо за вашу помощь!оле

Ответы [ 3 ]

1 голос
/ 08 февраля 2012

Решение:

RedirectMatch 301 ^/products/?$ /products/item

The /? позволяет ему соответствовать как / products, так и / products /

1 голос
/ 08 февраля 2012

В этом выражении

RedirectMatch 301 /products(.*) / products / item / $ 1

/products(.*) также будет соответствовать /products/item и приведет к бесконечному перенаправлению, которое вы наблюдали.

Вместо этого вы можете попробовать следующее правило

#if its not already products/item, redirect to products/item
RewriteRule ^(products)/(?!item/)(.*)$ $1/item/$2 [L,NC,R=301] 

Поместите это правило сразу после RewriteBase /

0 голосов
/ 08 февраля 2012
RewriteCond $0 !^products/item
RewriteRule ^(products)(.*)$ $1/item$2 [L,NC,R=301] 
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...