2011-09-04 47 views
1

我想知道是否有一种方法可以在服务器上基本托管一个站点,以便您可以运行PHP,但将实际代码托管在GitHub上。换句话说...将.htaccess路由到GitHub

如果一个HTTP请求去:
http://mysite.com/docs.html

它会请求,并在内容拉(通过file_get_contents()或东西):
https://raw.github.com/OscarGodson/Core.js/master/docs.html

或者,如果他们去:
http://mysite.com/somedir/another/core.js

它会拉低: https://raw.github.com/OscarGodson/Core.js/master/somedir/another/core.js

我知道GitHub有他们自己的DNS服务器,但是id在我的主机上,所以我可以运行服务器端代码。 htaccess代码是什么样子的?

+1

这样做的好处是什么?为什么不在你的服务器上克隆你的git仓库? – arnaud576875

+0

有没有PHP脚本或者什么的?我问,因为我只是不喜欢处理FTP,它几乎完全是在共享服务器上,我没有SSH访问的客户端网站。所以我想我可以上传这个可重用的htaccess文件,并指向正确的回购,然后我可以通过Git进行更改。 –

回答

4

如果需要在yourserver.com上的服务器上运行嵌入在github.com上的HTML中嵌入的PHP,只需通过类似于.htaccess中的重定向的配置行来运行,这超出了.htaccess文件的功能文件。

.htaccess文件通常用于向Apache Web服务器提供指令。例如,这些指令可以指示访问权限,弹出密码保护,URL与服务器文件系统之间的链接,服务器在传送到浏览器之前获取某些类型文件的处理程序,以及将URL从一个URL重定向到另一个URL。

.htaccess文件可以发出重定向http://mysite.com/somedir/another/core.jshttps://raw.github.com ....但浏览器将被指向raw.github.com,而不是mysite.com。技巧可以通过框架来完成,使得这种重定向在浏览器上对人类不那么透明...但是这些不会影响数据来自github.com而没有去过mysite.com服务器的事实

In特别是,嵌入在github.com上的HTML中的PHP标签永远不会被mysite.com的服务器收到,因此不会运行。可能不想要你想要的。除非在Apache中发生了一些重大变化,否则.htaccess文件不会设置该工作流程。有些专家可能会写一个apache模块来完成它,但我不确定。

你可以做的是在mysite.com上放置一个cron作业,git pull从github.com每隔几分钟就完成一次。也许这就是你想要做的呢?

+0

Awh,非常感谢。嗯,是的...有没有办法设置一个等待另一个网站更改的cron作业?所以,如果我做了改变,我不必等一个小时才能在另一台服务器上进行更改?我是一个JavaScript的人,所以对于n00b的问题很抱歉。我知道如何做到这一切所有与JS,但它不是索引但搜索引擎:\ –

+0

不,你只是更频繁地运行cron工作....像每5分钟或每2分钟。如果您使用共享主机,则可能有限制。 – Paul

+0

Git有一个服务器挂钩功能,你可以编写一个在git push到达时运行的shell脚本。如果您在自己的服务器上设置git,然后使用工作站上的“git push”推送它,这将非常有用。 – Paul

1

如果服务器可以运行PHP代码,您可以可以这样做。

基本上,在.htaccess文件中,您使用RewriteRule将所有路径发送到服务器上的PHP脚本。例如,对/somedir/anotherdir/core.js的请求变为/my-script.php/somedir/anotherdir/core.js。这是很多应用程序框架的运作方式。当my-script.php运行时,“真实”路径位于PATH_INFO变量中。

从这一点开始,脚本可以从GitHub获取文件。如果它是HTML或JavaScript或图像,它可以将它传递给客户端。 (但是,要正确地执行操作,您还需要传递所有正确的标题,例如ETag和Last-Modified,然后还要检查这些文件,以便高速缓存正常工作,而且不会花费太多时间传输不需要一次又一次传输的文件,否则你的网站会很慢。)

如果该文件是一个PHP文件,您可以在本地下载它,然后将include它插入到脚本中以执行它。但是,在这种情况下,您需要确保每个PHP文件都是独立的,因为您不知道哪些文件是从GitHub获取的,所以如果一个文件包含另一个文件,则需要确保这些文件依赖于第一个文件也被下载。而且这些文件也依赖于这些文件。

因此,总之,这个.htaccess部分非常简单,它只是一个RewriteRule。复杂性在于从GitHub获取文件的PHP脚本。如果你只是做最简单的事情,你的网站可能无法正常工作,或者它会工作,但真的很痛苦慢慢。如果你在这个脚本上做了大量的天才级别的工作,你可以让它运行良好。

现在,这里的目标是什么?为了节省自己登录服务器的麻烦并输入git pull来更新服务器文件?我希望我已经说服你,试图从GitHub按需获取文件将是更难以比

+0

不,我没有SSH访问我的客户的大部分网站,因为他们通常在共同主办。我不想记住100多个FTP用户/通过,我讨厌不得不使用Git,推送到GitHub,然后将文件复制并粘贴到他们的服务器上。我宁愿上传一个PHP脚本,将var设置为“x”repo,然后每当他们请求更新/更改时,我都可以推送到GitHub –

+0

Awh,并且我看到上面......好的,谢谢。那么生病了。 –

+0

如果您必须使用FTP,我会在某处保留一个干净的git checkout,并且当您需要部署时,执行'git pull',然后使用一个应用程序将本地dir通过FTP同步到服务器(只需跳过' .git'目录)。如果可以的话,说服你的客户切换到像NearlyFreeSpeech.NET这样的共享主机,它支持SSH并且可靠而且便宜。一旦你有SSH,你可以使用git push或者rsync或者其他几十个更好的工具。 – benzado