mod_rewrite规则重定向特定的URL匹配

时间:2014-04-23 16:37:25

标签: .htaccess mod-rewrite redirect

我正在使用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文件位于网站的根级别。

我是否正确编写了规则?我尝试了各种各样的搜索,但是这样的问题通常与忽略我不想要的特定文件夹有关。

由于

1 个答案:

答案 0 :(得分:0)

尝试关闭多重视图:

Options -Multiviews

多视图是mod_negotiation的一部分,它尝试将请求与现有文件匹配,包括缺少扩展名的文件。因此,mod_negotiation可能会看到/product/something的请求并看到文件/product.php并使用PATH INFO提供该文件,这将完全绕过mod_rewrite。

相关问题