php - 奇怪的htaccess mod重写表演

时间:2018-05-04 15:54:49

标签: php .htaccess mod-rewrite

我试图设置好的网址"到我的网站,我有mod重写条件的结构:

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]

上述所有条件似乎都被忽略了,例如,当我要求提交网址www.domain.com/contact/时,它应显示www.domain.com/kontakt.php,但不是这样,而是显示网页www.domain.com/product.php?url=contact。< / p>

当我删除最后一行时,一切正常。

有人可以给我一些解决方案吗?非常感谢!

1 个答案:

答案 0 :(得分:2)

.*匹配所有内容,并且您没有任何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} !-fRewriteCond %{REQUEST_FILENAME} !-d,以防止执行有效的文件和目录。