1

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

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

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

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

url http://mysite.com/page1/工作得很好。我认为问号意味着前一个模式的零个或一个匹配。为什么我的问号没有按说明工作?

4

2 回答 2

2

正则表达式^(.*)\/?$实际上将匹配任何字符串——您要求“任何字符串,后跟斜杠或不后跟斜杠”。因此,如果斜杠是可选的,它将把任何请求变成一个无限的重写循环。您可能需要RewriteCond过滤掉已经.php.

于 2012-09-02T19:41:27.187 回答
0

让我再解释一下:

  1. 首先通过 rewrite /page1/ 到 page1.php?something
  2. [L] 说:“停在这里,用新的 url 重新开始重写”
  3. 第二遍重写 /page1.php 到 page1.php.php?something
  4. 等等...
于 2012-09-02T19:57:16.730 回答