1

我有一个我认为是简单的 mod_rewrite 规则。

RewriteEngine on
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule ^store/([a-z0-9_\-]+)/?([a-z0-9_\-]+)?(.*)?$ store/$2?store_name=$1$3 [L]

但是,当我访问如下 URL 时:

http://www.mydomain.com/store/e95_airport/

它变成:

http://www.mydomain.com/store/e95_airport//////////////////

我期待 URL 加载:

index.php?store_name=e95_airport

当我调用如下 URL 时,它工作正常:

商店/e95_airport/some-page-other-than-index.php

我已禁用所有其他 mod_rewrite 规则,以防万一我的 .htaccess 文件中的其他地方发生冲突。这里有没有人可以诊断我的重写规则出了什么问题?任何帮助是极大的赞赏!

4

2 回答 2

3

问题是该站点正在使自己陷入循环,因为您将其重定向到基本相同的地址。

好的,所以您正在使用重写来更改它,但它重写它的 URL 仍然与表达式匹配。

mod_rewrite 的工作方式是,一旦它重写了 URL,它就会有效地使用新的 URL 重新查询自己。因此,如果您的新 URL 仍然与表达式匹配,它将进入一个循环。

为什么它停在 21 个斜线处?这是因为 Apache 会检测它何时处于循环中,并在它自身请求 20 次时停止。

于 2012-06-01T21:44:55.873 回答
0

正如@Spudley 所说,你陷入了一个循环。

查看您的重写规则,并查看您想要的结果,我会说重写规则也是错误的。它应该是这样的:

RewriteRule ^store/([a-z0-9_\-]+)/?([a-z0-9_\-]+)?(.*)?$ index.php?store_name=$1 [L]
于 2012-06-01T21:49:03.893 回答