【问题标题】:IIRF Rewrite Rule for IIS7IIS7 的 IIRF 重写规则
【发布时间】:2010-01-21 19:52:50
【问题描述】:

我正在使用 IIRF v2.1 重写规则

我写了这样的规则,但它不起作用

RewriteRule ^(prod|pag|staf)/([A-Za-z0-9-]+)/?$ $1.php?iid=$2 [QSA,L]

如果我使用以下网址

http://localhost/prod/22/new-item

我需要的实际网址是 http://localhost/prod.php?iid=22

是的工作版本是

RewriteRule /^(prod|pag|staf)/([A-Za-z0-9-]+)/?$ /$1.php?iid=$2 [QSA,L] 但这里的问题是所有样式和包含文件都不包括在内。

谢谢

【问题讨论】:

  • 您还有其他有效的规则吗?如果它与您的规则或 IIRF 配置相关,请尝试缩小范围。
  • 对于投票结束的人来说,这与编程有关,因为它确实是一个正则表达式问题。
  • 我认为这可能更适合 serverfault 。
  • RewriteRule /^(prod|pag|staf)/([A-Za-z0-9-]+)/?$ /$1.php?iid=$2 [QSA,L] 但有问题这里是所有样式,不包括包含文件。

标签: iis-7 iirf


【解决方案1】:

这样写网址

重写规则 ^/(prod|pag|staf)/([A-Za-z0-9-]+)/?$ /$1.php?iid=$2 [QSA,L]

并将 / 放在样式表和其他包含之前

喜欢

如果你的旧样式表是这样包含的

   style/style.css

改成

  /style/style.css

图片和链接相同。 希望这会正常工作。

【讨论】:

    【解决方案2】:

    您的正则表达式不允许 new-item 跟随最后的斜线。

    RewriteRule ^(prod|pag|staf)/([A-Za-z0-9-]+)/?$ $1.php?iid=$2 [QSA,L]

    结束模式的 /?$ 序列表示...一个斜杠(可能),然后是字符串的结尾。但是,您的 URL 不以斜杠结尾。它以斜线和文本“new-item”结尾。

    捕获 that 的正则表达式将是这样的:

    RewriteRule ^(prod|pag|staf)/([A-Za-z0-9-]+)/? $1.php?iid=$2 [QSA,L]

    ...这表示,您不关心可选斜杠之后的内容,并且由于您使用的是 QSA,因此原始 URL 中的任何查询字符串都将附加到传出 URL。

    但这基本上会丢弃传入 URL 请求的“新项目”部分,我不确定你是否想要这样做。

    【讨论】:

      【解决方案3】:

      如果您的 URL 将始终包含数字然后是 slug,则此正则表达式将获取每个部分:

      ^(prod|pag|staf)/([0-9]+)/([A-Za-z0-9-]+)/?
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 2011-04-07
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2011-05-07
        • 1970-01-01
        • 2014-05-08
        相关资源
        最近更新 更多