2012-04-23 61 views
1

我通常会将我的mod_rewrite条件放在.htaccess文件中,但这是一个必须放入httpd.conf文件的情况。 我很困惑,因为我想要做的事似乎很简单: 网站的根目录是一个嵌套的目录:mydomain.com/foo/bar/ 只需要这样。 我想写一条规则,让一个人可以输入: mydomain.com/simple它会显示来自mydomain/foo/bar的内容 另外,如果某个人点击了该网站,我想要mydomain.com/simple/一些其他页面结构要坚持。 我已经得到最接近的是这样的:Apache mod_rewrite不会保留名称

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

然而,使用这个法则,当一个人类型mydomain.com/simple它重写URI在浏览器中mydomain.com/foo/bar 上午什么我做错了? 在此先感谢。

回答

1

首先,有可能是这个规则的一个问题:

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

表达^simple永远不会得到匹配,因为所有的请求将与/开始。

您在规则的右侧使用$1,但在左侧没有匹配组来填充该规则。这意味着请求/simple会让你/foo/bar/,但/simple/somethingelse的请求不符合规则。如果这不是你想要的行为,你大概的意思是这样的:

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

(请注意,我已经添加了丢失的前导/这里也)。

随着这些更改就位,此规则在我的系统上运行,我认为您期待。

最后,打开RewriteLog并设置RewriteLogLevel(假设使用的是2.4之前的Apache版本)将有助于揭示具体发生的细节。