无法将多个子文件夹映射到htaccess中的目标

时间:2015-01-17 21:52:05

标签: php apache .htaccess mod-rewrite

我们已切换服务器,无论出于何种原因,我们的htaccess文件的行为方式与其他文件的行为方式不同。我将是第一个承认我不是超级用户的人,我毫不怀疑答案可能正在看着我,但实际上整个星期六的搜索都没有解决这个问题。我有这个文件系统:

当域 / category / subcategory / product /

它应重写为 /category/product-details.php?p=product&s=subcategory

当域 / category / subcategory /

它应重写为 /category-product-list.php?slug=subcategory

这看起来很简单,这是我们多年来一直使用的相同代码。注意,我们已经注释了关于斜杠的前两个RewriteRules,并且行为没有变化。

RewriteEngine On
RewriteBase /
# if folder does not end with a slash redirect to with slash
RewriteRule ^([-a-zA-Z0-9]+)$ /$1/ [L,NC,R=301]
#if it does not end with a slash e.g. rock-jewelry/some-piece, add the slash
RewriteRule ^([-a-zA-Z0-9]+/[-a-zA-Z0-9]+)$ /$1/ [L,NC,R=301]

RewriteRule ^category/([^/]+)/([^/]+)/?$ category/product-details.php?p=$2s=$1   [L,QSA]
RewriteRule ^category/([^/]+)/?$ category-product-list.php?slug=$1 [L,QSA]

当域 / category / subcategory / product /

重写为 /category-product-list.php?slug=product-details.php&p=product&s=subcategory

当域 / category / subcategory /

正确重写为 /category-product-list.php?slug=subcategory

/ category /是一个实际的文件夹,其中唯一的东西是product-details.php,没有index.php文件,如果他们试图将htaccess重写为category-product-list访问索引。

如果我们删除category-product-list.php规则,则product-details.php规则可以正常工作。但L指令不应该停留在第一条规则吗?为什么第二个还在运行?我怎样才能写出更好的方法来实现这一目标?非常感谢,我现在非常打击这个问题。

1 个答案:

答案 0 :(得分:0)

我有同样的问题,你要理解这个循环的原因......但就像那样。

您可以在最后一次RewriteRule之前添加:

RewriteCond %{REQUEST_FILENAME} !-f

或者,如果您不在子类别中使用dot,则可以使用final RewriteRule:

RewriteRule ^category/([^./]+)/?$ category-product-list.php?slug=$1 [L,QSA]