Мы переключили серверы, и по какой-то причине наш файл 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 не должна останавливаться при первом правиле? Почему второй все еще работает? И как я могу написать лучший способ достичь этой цели? Большое вам спасибо, я довольно измучен этой проблемой на данный момент.
У меня та же проблема, что и вы, чтобы понять, почему этого цикла... Но это так.
Вы можете добавить это до последнего RewriteRule:
RewriteCond %{REQUEST_FILENAME} !-f
Или, если вы не используете точку в подкатегории, вы можете использовать final RewriteRule:
RewriteRule ^category/([^./]+)/?$ category-product-list.php?slug=$1 [L,QSA]