我正在使用mod_rewrite将长网址重定向到特定网页。它对于商店来说基本上如果URL是一个文件夹深度它将用户带到特定页面,如果URL是两个文件夹它将它们带到另一个等等。我使用以下实现了...
RewriteRule ^([^/\.]+)/?$ shop.php?category=$1 [L]
RewriteRule ^([^/\.]+)/([^/\.]+)/?$ brand.php?category=$1&brand=$2 [L]
RewriteRule ^([^/\.]+)/([^/\.]+)/([^/\.]+)/?$ handler.php?category=$1&brand=$2&product=$3 [L]
RewriteRule ^([^/\.]+)/([^/\.]+)/([^/\.]+)/([^/\.]+)/?$ handler.php?category=$1&brand=$2&product=$3&car=$4 [L]
请注意,每个规则都是比前一个更深的文件夹。
我宁愿将用户带到http://www.domain.com/PRODUCT/DB/ID而不是将另一个规则用于最后一个产品页面,所以我写了一条规则来检查第一个文件夹是否为PRODUCT,如果是,请将用户带到PRODUCT.PHP DB = $ 1和;?ID = $ 16 ...
RewriteRule ^product/([^/\.]+)/([^/\.]+)/?$ /product.php?db=$1&id=$2 [L]
但它仍然会返回404错误。我把这个新规则放在其他规则之前,希望它能在任何其他规则之前执行此规则(这似乎是3个文件夹深度,当第一个文件夹不是产品时还有另一个规则)
.htaccess和后续.php文件位于网站的根级别。
我是否正确编写了规则?我尝试了各种各样的搜索,但是这样的问题通常与忽略我不想要的特定文件夹有关。
由于
答案 0 :(得分:0)
尝试关闭多重视图:
Options -Multiviews
多视图是mod_negotiation的一部分,它尝试将请求与现有文件匹配,包括缺少扩展名的文件。因此,mod_negotiation可能会看到/product/something
的请求并看到文件/product.php
并使用PATH INFO提供该文件,这将完全绕过mod_rewrite。