在我的正则表达式中零或一个向前斜杠

时间:2012-09-02 19:35:45

标签: regex apache url-rewriting

我不明白我的apache重写规则中的正则表达式有什么问题:

RewriteRule ^(.*)\/?$ $1.php?%1 [L]

当转到网址http://mysite.com/page1/时,我收到错误消息。但是,如果我将重写规则中的正则表达式更改为

RewriteRule ^(.*)\/$ $1.php?%1 [L]

网址http://mysite.com/page1/完美无缺。我认为问号意味着前一个模式的零或一个匹配。为什么我的问号不按照规定工作?

2 个答案:

答案 0 :(得分:2)

正则表达式^(.*)\/?$实际上匹配任何字符串 - 您要求“任何字符串,后跟斜杠或后跟斜杠”。因此,如果斜杠是可选的,它会将任何请求转换为无限重写循环。您可能需要RewriteCond过滤.php中结束的请求。

答案 1 :(得分:0)

让我再解释一下:

  1. 首先通过重写/ page1 / to page1.php?something
  2. [L]说:“停在这里并重新开始用新网址重写”
  3. 第二次将/page1.php重写为page1.php.php?something
  4. 依旧......