mod_rewrite规则删除.php扩展名现在显示完整的文件系统path

我正在将一个站点从Wordpress迁移到Octopress – 但是已经设法完成了mod_rewrite设置的过程。

目前,所有的url都是格式

http://site.com/archives/yyyy/mmm/posttitle.php

一旦移植到Octopress,他们现在的格式是:

http://site.com/archives/yyyy/mmm/posttitle

也有一些顶级的网页是所有的变化

http://site.com/pagename.php

现在

http://site.com/pagename

我还有

RewriteRule ^(.+)\.php $1

这似乎很好地工作 – 但只要我包括301redirect:

 RewriteRule ^(.+)\.php $1 [R=301] 

重写规则现在包括完整的文件系统path – 所以:

http://site.com/var/www/octopress/archives/yyyy/mmm/posttitle.php

任何人都可以指出我哪里错了?

ETA

RewriteRule<Directory>块中:

 <Directory /> ReWriteEngine On RewriteRule ^(.+)\.php $1 Options FollowSymLinks AllowOverride All </Directory> 

正则expression式在文件系统path上匹配,而不是在目录和htaccess上下文中发生的URL。 在VirtualHost上下文中,它与URL相匹配,详见RewriteRule的Apache HTTPD 2.2文档:

什么是匹配?

在VirtualHost上下文中,模式最初将与主机名和端口之后以及查询string(例如“/app1/index.html”)之前的URL部分相匹配。 在目录和htaccess上下文中,模式最初将与文件系统path相匹配,在删除引导服务器到当前RewriteRule的前缀(例如“app1 / index.html”或“index.html”,取决于指令的位置被定义)。 如果您希望与主机名,端口或查询string匹配,请分别使用RewriteCond和%{HTTP_HOST},%{SERVER_PORT}或%{QUERY_STRING}variables。

1