1

我通常将我的 mod_rewrite 条件放在一个 .htaccess 文件中,但在这种情况下,它必须放在 httpd.conf 文件中。我很困惑,因为我想做的事情似乎很简单:站点的根目录是一个嵌套目录:mydomain.com/foo/bar/ 它必须是这样的。我想编写一个规则,以便一个人可以输入:mydomain.com/simple,它将显示来自 mydomain/foo/bar 的内容另外,如果有人点击该站点,我想要 mydomain.com/simple/some-other - 页面结构保持不变。我得到的最接近的是:

<IfModule mod_rewrite.c>
RewriteEngine on
RewriteRule   ^simple$ /foo/bar/$1 [PT]
</IfModule>

但是,使用此规则,当一个人键入 mydomain.com/simple 时,它​​会将浏览器中的 URI 重写为 mydomain.com/foo/bar 我做错了什么?提前致谢。

4

1 回答 1

1

首先,这条规则可能有问题:

RewriteRule   ^simple$ /foo/bar/$1 [PT]

表达式^simple可能永远不会匹配,因为所有请求都以/.

您在$1规则的右侧使用,但左侧没有匹配组来填充它。这意味着请求/simple会得到你/foo/bar/,但请求/simple/somethingelse不会匹配规则。如果这不是您想要的行为,您可能的意思是:

    RewriteRule   ^/simple(.*)$ /foo/bar$1 [PT]

(请注意,我也在/这里添加了缺失的前导)。

随着这些变化的到位,这条规则在我的系统上的行为正如我认为你所期望的那样。

最后,打开RewriteLogand 设置RewriteLogLevel(假设 Apache 是 2.4 之前的版本)将有助于揭示正在发生的事情的详细信息。

于 2012-04-23T16:01:10.587 回答