我正在将一个站点从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