【问题标题】:Conditional .htaccess RewriteRule parameter有条件的 .htaccess RewriteRule 参数
【发布时间】:2008-12-23 10:27:11
【问题描述】:

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

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

这两者之间的唯一区别是前导的“embed/”,所以我认为将它们组合成一个 RewriteRule 是有益的。我的尝试停留在

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

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

在将前两个 RewriteRule 组合成一个 RewriteRule 时如何解决此问题的任何想法?

【问题讨论】:

    标签: apache .htaccess mod-rewrite


    【解决方案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
    

    但是,这是否可行仍取决于实际应用程序。

    【讨论】:

    • 规则并不总是以 start 结束,并且具有比显示的更多的参数。不过,这个想法很好,我会尝试一下。
    【解决方案2】:

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

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

    不是很漂亮,但很有效。我现在可以有多个以“something/”开头的规则,并且所有这些规则都可以使用“embed/”作为前缀。

    【讨论】:

      猜你喜欢
      • 2014-12-18
      • 1970-01-01
      • 1970-01-01
      • 2014-08-16
      • 1970-01-01
      • 1970-01-01
      • 2015-12-04
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多