条件.htaccess RewriteRule参数

时间:2008-12-23 10:27:12

标签: apache .htaccess mod-rewrite

我的.htaccess中有很多RewriteRules,看起来像这样

RewriteRule ^something/(\d+)/start    /index.php?ix=$1
RewriteRule ^embed/something/(\d+)/start    /index.php?ix=$1&fEmbed=1

这两者之间的唯一区别是领先的“嵌入/”,所以我认为将这些组合成一个RewriteRule是有益的。我的尝试被困在

RewriteRule ^(embed/)?something/(\d+)/start    /index.php?ix=$2&fEmbed=$1

哪个设置“& fEmbed = embed /”,这真的不是我想要的。我想评估$ 1的内容,并输出不同的东西(即“1”)。

如何在将前两个RewriteRules组合成一个RewriteRule时如何处理这个问题?

2 个答案:

答案 0 :(得分:1)

我认为这应该是两条规则,但它们不应该做同样的事情。以下是未经测试的,但希望意图很明确,如果它不能“开箱即用”:

RewriteRule ^(embed/)?something/(\d+)/start$    /index.php?ix=$2
RewriteRule ^embed/(.*)    $1&fEmbed=1

我假设“/ start”始终位于URL的末尾。如果没有,那就更难了。

编辑:阅读Vegard的评论我想也许可以通过交换规则来处理:

RewriteRule ^embed/(.*)    $1&fEmbed=1
RewriteRule ^something/(\d+)/start    /index.php?ix=$1

但是,如果这样做有效,它依赖于真实世界的应用程序。

答案 1 :(得分:0)

使用PEZ的想法,这就是我提出的:

RewriteRule ^something/(\d+)/start(&fEmbed=1)?    /index.php?ixQuiz=$1&fStart=1$2
RewriteRule ^embed/(.*)                         $1&fEmbed=1

不是很漂亮,但它确实有效。我现在可以有多个以“something /”开头的规则,并且所有这些规则都可以使用“embed /".

作为前缀。