php - странный htaccess мод, переписывающий действия - PullRequest
0 голосов
/ 04 мая 2018

Я пытаюсь установить "хорошие URL" на свой веб-сайт, и у меня есть такая структура условий переписывания модов:

RewriteRule ^/$ /index.php?&%{QUERY_STRING} [L]
RewriteRule ^tabulky-velikosti/?$ tabulky-velikosti.php?&%{QUERY_STRING} [L]
RewriteRule ^o-bambusu/?$ o-bambusu.php?&%{QUERY_STRING} [L]
RewriteRule ^kolekce/?$ kolekce.php?&%{QUERY_STRING} [L]
RewriteRule ^vymena-zbozi/?$ vymena-zbozi.php?&%{QUERY_STRING} [L]
RewriteRule ^doprava-a-platba/?$ doprava-a-platba.php?&%{QUERY_STRING} [L]
RewriteRule ^obchodni-podminky/?$ obchodni-podminky.php?&%{QUERY_STRING} [L]
RewriteRule ^ochrana-osobnich-udaju/?$ ochrana-osobnich-udaju.php?&%{QUERY_STRING} [L]
RewriteRule ^onas/?$ onas.php?&%{QUERY_STRING} [L]
RewriteRule ^contact/?$ kontakt.php?&%{QUERY_STRING} [L]
RewriteRule ^faq/?$ faq.php?&%{QUERY_STRING} [L]

RewriteRule ^kategorie/panske-pradlo/?$ category.php?gender=panske&%{QUERY_STRING} [L]
RewriteRule ^kategorie/damske-pradlo/?$ category.php?gender=damske&%{QUERY_STRING} [L]
RewriteRule ^kategorie/detske-pradlo/?$ category.php?gender=detske&%{QUERY_STRING} [L]

RewriteRule ^(.*)/?$ product.php?url=$1&%{QUERY_STRING} [L]

Когда я использую инструмент тестирования (https://htaccess.madewithlove.be),, все хорошо, но когда я пытаюсь запустить его на реальном веб-сайте, возникает проблема с последним условием

RewriteRule ^(.*)/?$ product.php?url=$1&%{QUERY_STRING} [L]

Кажется, что все вышеперечисленные условия игнорируются, например, когда я спрашиваю url www.domain.com/contact/, он должен показывать www.domain.com/kontakt.php, но вместо этого показывает страницу www.domain.com/product.php?url=contact.

Когда я удаляю последнюю строку, все работает как надо.

Может кто-нибудь дать мне какое-нибудь решение этого вопроса, пожалуйста? Большое спасибо!

1 Ответ

0 голосов
/ 04 мая 2018

.* соответствует всему, и у вас нет RewriteCond выше последнего правила, чтобы сделать это правило условным.

Кроме того, у вас есть много ненужного использования %{QUERY_STRING} в целевом URI, которое вы можете получить с флагом QSA.

Полностью с рефакторингом .htaccess должен выглядеть следующим образом:

DirectoryIndex index.php
RewriteEngine On

RewriteRule ^tabulky-velikosti/?$ tabulky-velikosti.php [L]
RewriteRule ^o-bambusu/?$ o-bambusu.php [L]
RewriteRule ^kolekce/?$ kolekce.php [L]
RewriteRule ^vymena-zbozi/?$ vymena-zbozi.php [L]
RewriteRule ^doprava-a-platba/?$ doprava-a-platba.php [L]
RewriteRule ^obchodni-podminky/?$ obchodni-podminky.php [L]
RewriteRule ^ochrana-osobnich-udaju/?$ ochrana-osobnich-udaju.php [L]
RewriteRule ^onas/?$ onas.php [L]
RewriteRule ^contact/?$ kontakt.php [L]
RewriteRule ^faq/?$ faq.php [L]

RewriteRule ^kategorie/((?:pan|dam|det)ske)-pradlo/?$ category.php?gender=$1 [L,QSA]

RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule ^(.+?)/?$ product.php?url=$1 [L,QSA]

Запишите RewriteCond %{REQUEST_FILENAME} !-f и RewriteCond %{REQUEST_FILENAME} !-d перед последним правилом, чтобы предотвратить выполнение для допустимых файлов и каталогов.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...