HTML5 Boilerplate构建脚本,基于VCS的部署和重复内容

时间:2012-05-20 23:34:40

标签: .htaccess html5boilerplate build-script

我在一个刚刚部署到临时环境的新项目中使用HTML5 Boilerplate构建脚本。这个剧本就像一个魅力;它有很好的文档记录,所以很容易配置在我的应用程序中使用。

阅读完文档后,我决定使用Paul Irish的基于VCS的部署方法指向/ publish目录,使用他的.htaccess文件中的文档片段:

RewriteEngine On
RewriteCond $1 !^publish/
RewriteRule ^(.*)$ publish/$1 [L]

我为它的特定设置配置了这样的配置,并且所有内容都指向了缩小和连接的文件。这很棒,但是/ publish目录也可以通过http:// [mysite.com] / publish /

直接浏览

这似乎是一种松散的线程,可以留下悬空。我想知道这里是否有人遇到过这个并提出了一个很好的解决方案。我不希望用户输入/发布/在URL之后,但我不希望它可以被抓取,并且它似乎有点草率离开它。

有什么想法吗?

提前致谢

更新>非常感谢Gerben的帮助,下面,我最后改变了我的想法 - 没有必要将用户从/发布到根URL,因为用户赢了'输入/发布,并且永远不会有任何链接到[site.com] / publish。相反,我在/ publish目录中的.htaccess文件中添加了以下规则。这会对发布子目录的任何请求产生403错误(禁止):http://httpd.apache.org/docs/current/rewrite/flags.html#flag_f

RewriteCond %{THE_REQUEST} publish
RewriteRule .? - [F]

此外,我已将发布目录添加到robots.txt,以确保搜索机器人不会索引包含相同数据的两组文件。

2 个答案:

答案 0 :(得分:0)

似乎我误解了你的问题。我认为以下内容会将任何内容重定向到根文件夹。

RewriteCond %{THE_REQUEST} " /publish/"
RewriteRule ^publish/(.*) /$1 [R=302,L]

为了确保我可能还会将我的robots.txt添加/公开为禁止,以防您意外删除了htaccess或其他内容。

说明:RewriteRule会检查请求的网址是否以publish/___开头,并将这些网址重定向到/___。但要区分对/publish的直接请求和重写为/publish的网址,您需要检查最初请求的网址。达到这个目的的唯一方法是通过THE_REQUEST变量。对于直接请求,该变量应包含GET /publish/___ HTTP/1.1之类的内容。因此RewriteCond会检查是否存在<space>/publish/

编辑:最终尝试:

RewriteBase /
RewriteCond %{ENV:REDIRECT_STATUS} ^$
RewriteRule ^publish/(.*) /$1 [R=302,L]

答案 1 :(得分:0)

因此,我最终得到的解决方案是在用户偶然发现[site.com] / publish的奇怪机会时抛出403(禁止)错误。我是这样做的:

在根目录的.htaccess文件中,我保留了h5bp文档中的这条规则:

RewriteCond $1 !^publish/
RewriteRule ^(.*)$ publish/$1 [L]

在/ publish目录的.htaccess文件中,我添加了这个规则,带有F标志(禁止):

RewriteCond %{THE_REQUEST} publish
RewriteRule .? - [F]

我希望这对遇到此问题的其他人有帮助!