У меня есть сайт, который использует apache mod_rewrite
и работает последние 6 месяцев без ошибок.
У меня есть следующее правило перезаписи:
RewriteRule ^products/([az\-]+)/$ /products.php?category=$1 [NC,L]
Вот код на моей странице products.php
$category = $_GET['category']; if (isset($category)) { // do some processing here } else { header("Location: /500.html"); exit; }
Примером ссылки, которая соответствует этому правилу, является /products/lighting-poles/
Кто-нибудь знает, почему фактический переписывание все еще происходит, но не сопоставляет ([az\-]+)
с category=$1
?
Дополнительная информация
Я заметил, что файл .htaccess
на хосте прокомментировал строку Options +FollowSymLinks
поэтому я сначала попытался снова включить это, только чтобы сайт вернул ошибку белого экрана apache 500
.
Больше из файла .htaccess
<IfModule mod_rewrite.c> #Options +FollowSymLinks RewriteEngine On RewriteBase / # Add a trailing slash to paths without an extension RewriteCond %{REQUEST_METHOD} !POST RewriteCond %{REQUEST_FILENAME} !-f RewriteCond %{REQUEST_URI} !(\.[a-zA-Z0-9]{1,5}|/)$ RewriteRule ^(.*)$ $1/ [L,R=301] # other rules including problem rule here </IfModule>
Это звучит болезненно, как проблема с несколькими видами. Multiviews – это предмет согласования контента, который, если он включен, попробует несколько дополнительных вещей в конвейере сопоставления URL-файлов, чтобы попытаться найти файл, который сопоставляется с URL-адресом. Здесь у вас есть URL-адрес, например /products/blah
, но у вас есть файл под названием products.php
, поэтому мультивизоры могут попытаться сопоставить products
с /products.php/blah
. Таким образом, полностью обходя правило перезаписи, и вы не видите параметр category
.
Где варианты, попробуйте добавить:
Options -Multiviews