我正在将网站从 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
这似乎工作得很好-但只要我包含 301 重定向:
RewriteRule ^(.+)\.php $1 [R=301]
重写规则现在包括完整的文件系统路径-因此:
http://site.com/var/www/octopress/archives/yyyy/mmm/posttitle.php
有人能指出我哪里错了吗?
预计到达时间
该块RewriteRule
位于<Directory>
:
<Directory />
ReWriteEngine On
RewriteRule ^(.+)\.php $1
Options FollowSymLinks
AllowOverride All
</Directory>
答案1
正则表达式匹配文件系统路径而不是 URL,这在 Directory 和 htaccess 上下文中发生。在 VirtualHost 上下文中,它匹配 URL,如 Apache HTTPD 2.2 文档中有关 RewriteRule 的详细说明:
什麼是匹配?
在 VirtualHost 上下文中,Pattern 最初将与 URL 中主机名和端口之后、查询字符串之前的部分进行匹配(例如“/app1/index.html”)。在 Directory 和 htaccess 上下文中,Pattern 最初将与 > 文件系统路径进行匹配,在删除将服务器引导至当前 RewriteRule 的前缀之后(例如“app1/index.html”或“index.html”,具体取决于指令的定义位置)。如果您希望与主机名、端口或查询字符串进行匹配,请分别使用带有 %{HTTP_HOST}、%{SERVER_PORT} 或 %{QUERY_STRING} 变量的 RewriteCond。