Htaccess重写条件问题

时间:2011-09-07 18:16:36

标签: apache .htaccess mod-rewrite

我正在尝试关注Paul Irish的示例,了解如何在/publish内建立我的网站的缩小版本。我已成功集成自动构建过程但无法将.htaccess文件指向正确的文件夹。

我的目标:

在实时服务器上将所有正常网站流量重定向到/publish文件夹以使用“内置”网站。但是在开发服务器上使用/普通根文件夹中的开发文件时。

我的问题:

我希望htaccess将请求从根目录重写到/publish目录。由于在//publish目录中将使用相同的htaccess,我需要重写条件来阻止它将/publish目录中的请求重写为/publish/publish/my-page。我现在有这个:

RewriteCond %{SCRIPT_FILENAME} !^/publish/.+
RewriteRule ^(.*)$ publish/$1 [L]

上述条件会查找没有以script_filename开头的/publish的请求。如果是这样,它应该在前面用publish/重写请求。

但是,这不起作用。有没有人有什么想法呢?我可以使用不同的服务器变量来识别请求是否在/publish目录中。

2 个答案:

答案 0 :(得分:2)

我认为当你没有明确地向Apache提出一个php文件时,%{SCRIPT_FILENAME}没有设置,也许你应该尝试使用%{REQUEST_FILENAME}
顺便说一下,您可以查看mod_rewrite doc页面以获取更多信息:http://httpd.apache.org/docs/current/en/mod/mod_rewrite.html#rewritecond

答案 1 :(得分:2)

您应该使用%{REQUEST_URI},因为它是正确的变量,它将具有相对于站点根目录的路径,而不是其他物理文件名。

RewriteCond %{REQUEST_URI} !^/publish/
RewriteRule ^(.*)$ publish/$1 [L]