Неполадки при отображении нескольких вложенных папок в пункты назначения в htaccess

0

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

Когда домен является /category/subcategory/product/

Он должен переписать в /category/product-details.php?p=product&s=subcategory

Когда домен является /category/subcategory/

Он должен переписать в /category-product-list.php?slug=subcategory

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

RewriteEngine On
RewriteBase /
# if folder does not end with a slash redirect to with slash
RewriteRule ^([-a-zA-Z0-9]+)$ /$1/ [L,NC,R=301]
#if it does not end with a slash e.g. rock-jewelry/some-piece, add the slash
RewriteRule ^([-a-zA-Z0-9]+/[-a-zA-Z0-9]+)$ /$1/ [L,NC,R=301]

RewriteRule ^category/([^/]+)/([^/]+)/?$ category/product-details.php?p=$2s=$1   [L,QSA]
RewriteRule ^category/([^/]+)/?$ category-product-list.php?slug=$1 [L,QSA]

Когда домен является /category/subcategory/product/

Он перезаписывает /category-product-list.php?slug=product-details.php&p=product&s=subcategory

Когда домен является /category/subcategory/

Он правильно перезаписывает /category-product-list.php?slug=subcategory

/category/является фактической папкой, и единственное, что в ней есть: product-details.php, нет файла index.php, htaccess должен переписываться в категорию-список продуктов, если они пытаются получить доступ к индексу,

Если мы удалим правило category-product-list.php, то будет работать правило product-details.php. Но разве директива L не должна останавливаться при первом правиле? Почему второй все еще работает? И как я могу написать лучший способ достичь этой цели? Большое вам спасибо, я довольно измучен этой проблемой на данный момент.

Теги:
.htaccess
mod-rewrite

1 ответ

0

У меня та же проблема, что и вы, чтобы понять, почему этого цикла... Но это так.

Вы можете добавить это до последнего RewriteRule:

RewriteCond %{REQUEST_FILENAME} !-f

Или, если вы не используете точку в подкатегории, вы можете использовать final RewriteRule:

RewriteRule ^category/([^./]+)/?$ category-product-list.php?slug=$1 [L,QSA]

Ещё вопросы

Сообщество Overcoder
Наверх
Меню