Неправильно:
RewriteRule ^(.*)\.html$ /$1\.php5
Справа:
RewriteRule ^(.*)\.html$ /$1.php5
правее:
RewriteRule ^(.*)\.html$ /$1.php5 [QSA]
Эта та же ошибка выхода из специальных символов во втором параметре RewriteRule происходит и в других правилах, я не знаю, справится ли apache с этим, но я знаю, что вам это не нужно, потому что второй параметр не является регулярным выражением .
Никогда не сравнивайте с %{THE_REQUEST}
, это странная вещь, вам это не нужно. Более того, это условие прекрасно без него. Просто положите туда:
RewriteRule ^(.*)index\.(php5|html)$ $1 [R=301,QSA,L]
Теперь посмотрите на это:
RewriteRule ^(.*)\.html/(.*)$ /$1.html?$2
Во-первых, вы все еще принимаете, что есть ссылки на файлы .html, просто после попытки перевести все .html в .php5 здесь что-то не так.
Более того, вы определяете как QueryString что-то, что изначально было путем к файлу, и даже не помещаете его в ключ. Это не сработает, нужно больше лечения.
#strip .html from search res page
RewriteRule ^(.*)search/(.*)$ /$1search_results.html/search=$2
Разве это не должно было раздеть .html? Потому что на самом деле помещает туда .html. Возможно, поскольку это не [L], это исправлено в следующем цикле, но вы можете просто исправить все прямо здесь.
#translate product details link from search res page
RewriteRule ^products/(.*)/(.*)/(.*)$ /product_details.php5?category=$1&title=$2&id=$3 [L]
Этот полный. * Потенциально нестабилен, особенно ограничивая конец. Вы должны сделать это:
RewriteRule ^products/([^/]*)/([^/]*)/([^/]*) /product_details.php5?category=$1&title=$2&id=$3 [L]
# or:
RewriteRule ^products/(.*?)/(.*?)/([^/]*) /product_details.php5?category=$1&title=$2&id=$3 [L]
Последний выглядит правильно, за исключением того, что вы должны убрать специальный символ, который может рассматриваться как разделитель диапазона, - "-". Я не думаю, что это работает после *, но просто чтобы быть уверенным и исправить синтаксис:
RewriteRule ^products/.*\-P([0-9]+) /productview.php5?id=$1 [L]