Маршрутизация .htaccess на GitHub - PullRequest
1 голос
/ 04 сентября 2011

Мне было интересно, есть ли способ разместить сайт на вашем сервере, чтобы вы могли запускать PHP, но иметь реальный код, размещенный на 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-серверы, но вместо этого разместите их на моем, чтобы я мог запустить код на стороне сервера.Как будет выглядеть код htaccess для этого?

Ответы [ 2 ]

4 голосов
/ 05 сентября 2011

Это выходит за рамки возможностей файлов .htaccess, если требуется запустить PHP, встроенный в HTML-файл, хранящийся на github.com на сервере yourserver.com, просто с помощью строки конфигурации, такой как перенаправление в файле .htaccess. ,

Файл .htaccess обычно используется для предоставления директив веб-серверу Apache. Эти директивы могут указывать, например, разрешения на доступ, защиту от всплывающих паролей, связи между URL-адресами и файловой системой сервера, обработчики для определенных типов файлов, когда сервер выбирает их перед доставкой в ​​браузер, и перенаправлять с одного URL-адреса на другой URL-адрес.

Файл .htaccess может создавать перенаправления от http://mysite.com/somedir/another/core.js до https://raw.github.com...., но тогда браузер будет указывать на raw.github.com, а не mysite.com. С помощью фреймов можно сделать трюки, чтобы сделать это перенаправление менее прозрачным для человека в браузере ... но это не влияет на тот факт, что данные поступают с github.com, даже не переходя на сервер mysite.com

В частности, теги PHP, встроенные в HTML на github.com, никогда не принимаются сервером mysite.com и поэтому не будут работать. Наверное, не хочу, чтобы ты хотел. Если в Apache не произошли большие изменения, файлы .htaccess не будут настраивать этот рабочий процесс. Некоторый эксперт может написать для этого модуль apache, но я не уверен.

То, что вы можете сделать, это разместить на mysite.com задание cron, которое каждые несколько минут будет выполнять git pull с github.com. Возможно, это то, что вы хотите сделать вместо этого?

1 голос
/ 05 сентября 2011

Если сервер может выполнять код 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.Сложность заключается в PHP-скрипте, который выбирает файлы из GitHub.И если вы просто сделаете простейшую вещь, возможно, ваш сайт может не работать, или он будет работать, но очень болезненно медленно .И если вы проделаете кучу гениального уровня работы над этим сценарием, вы можете заставить его работать нормально.

Теперь, какая здесь цель?Чтобы избавить себя от необходимости заходить на сервер и вводить git pull для обновления файлов сервера?Я надеюсь, что убедил вас, что попытка получить файлы по требованию с GitHub будет еще более сложной задачей .

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...