重写一个文件夹,以便所有文件都显示在新的重写规则下

时间:2012-01-03 20:19:06

标签: php mod-rewrite

有没有办法可以重写文件夹,以便该文件夹下的所有文件都遵循相同的规则?例如:

如果我有一个文件夹,其中包含5个php文件(a.php,b.php,c.php,d.php,index.php),我使用以下规则:

RewriteRule ^products/storage/?$ /content/products/storage/index.php [QSA,L]

有没有办法让我可以显示所有要访问的文件:site.com/products/apples/a.php,site.com/products/apples/b.php等,而不必为每个人写一条规则?

我尝试了以下但它没有用。

RewriteRule ^products/storage/?$ /content/products/storage/ [QSA,L]

我还需要它不要覆盖我的其他规则,例如:

RewriteRule ^products/storage/?$ /content/products/storage/product-name1/ [QSA,L]
RewriteRule ^products/storage/?$ /content/products/storage/product-name2/ [QSA,L]

任何想法?

1 个答案:

答案 0 :(得分:2)

您的问题是正则表达式末尾的尾随$。如果完整URI products/storage(带有可选的尾部斜杠)完全匹配,则只允许匹配。相反,请尝试以下操作并注意缺少尾随的$字符:

RewriteRule ^products/storage/? /content/products/storage/ [QSA,L]

这将匹配以products / storage开头的任何内容(带有可选的尾部斜杠)。或者,如果您想捕获并重复使用products/storage/后面的URI中的所有内容,您可以尝试:

RewriteRule ^products/storage(/?.+)?$ /content/products/storage$1 [QSA,L]

<强>更新

如果您更新的问题建议,您是否需要保留其他RewriteRule,则应该添加RewriteCond条件,如下所示:

RewriteCond !^products/storage/?$
RewriteRule ^products/storage(/?.+)?$ /content/products/storage$1 [QSA,L]

RewriteCond告诉RewriteRule仅在不符合条件的情况下处理。