Apache mod_rewrite不保留名称

Apache mod_rewrite不保留名称,apache,mod-rewrite,Apache,Mod Rewrite,我通常将mod_重写条件放在.htaccess文件中,但在这种情况下,它必须放在httpd.conf文件中。 我很困惑,因为我想做的事情似乎很简单: 该站点的根目录是一个嵌套目录:mydomain.com/foo/bar/ 必须是那样的。 我想写一条规则,这样一个人就可以进入: mydomain.com/simple,它将显示mydomain/foo/bar中的内容 另外,如果有人在站点上点击,我希望mydomain.com/simple/some-other-page结构能够保持不变。 我得到

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

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

重新启动发动机
重写规则^simple$/foo/bar/$1[PT]
但是,使用此规则,当用户键入mydomain.com/simple时,会将浏览器中的URI重写为mydomain.com/foo/bar 我做错了什么?
提前感谢。

首先,此规则可能有问题:

RewriteRule   ^simple$ /foo/bar/$1 [PT]
表达式
^simple
可能永远不会匹配,因为所有请求都以
/
开头

您在规则的右侧使用了
$1
,但左侧没有将填充此规则的匹配组。这意味着对
/simple
的请求将获得
/foo/bar/
,但对
/simple/somethingelse
的请求将与规则不匹配。如果这不是您想要的行为,您可能是指:

    RewriteRule   ^/simple(.*)$ /foo/bar$1 [PT]
(注意,我在这里也添加了缺少的前导
/

有了这些变化,这个规则在我的系统上运行,正如我认为您所期望的那样


最后,打开
RewriteLog
并设置
RewriteLogLevel
(假设是Apache 2.4之前的版本)将有助于公开所发生事情的详细信息。

首先,此规则可能有问题:

RewriteRule   ^simple$ /foo/bar/$1 [PT]
表达式
^simple
可能永远不会匹配,因为所有请求都以
/
开头

您在规则的右侧使用了
$1
,但左侧没有将填充此规则的匹配组。这意味着对
/simple
的请求将获得
/foo/bar/
,但对
/simple/somethingelse
的请求将与规则不匹配。如果这不是您想要的行为,您可能是指:

    RewriteRule   ^/simple(.*)$ /foo/bar$1 [PT]
(注意,我在这里也添加了缺少的前导
/

有了这些变化,这个规则在我的系统上运行,正如我认为您所期望的那样

最后,打开
RewriteLog
并设置
RewriteLogLevel
(假设是Apache的2.4之前版本)将有助于准确地公开发生的事情的细节