Apache mod_rewrite不保留名称
我通常将mod_重写条件放在.htaccess文件中,但在这种情况下,它必须放在httpd.conf文件中。 我很困惑,因为我想做的事情似乎很简单: 该站点的根目录是一个嵌套目录:mydomain.com/foo/bar/ 必须是那样的。 我想写一条规则,这样一个人就可以进入: mydomain.com/simple,它将显示mydomain/foo/bar中的内容 另外,如果有人在站点上点击,我希望mydomain.com/simple/some-other-page结构能够保持不变。 我得到的最接近的结果是: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结构能够保持不变。 我得到
<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之前版本)将有助于准确地公开发生的事情的细节