Php heroku集合文档\u根
如果我有这样的目录结构:Php heroku集合文档\u根,php,heroku,Php,Heroku,如果我有这样的目录结构: / /libraries/ /other-nonpublic-stuff/ /webroot/ 如何将/webroot/设置为文档的根目录,以便在我的herokuapp的URL下仅提供其内容 我认为Procfile可能是实现这一点的方法,但它并没有真正的文档化。 已经尝试过类似的事情 web: php webroot/ 或 或 在Procfile中,但我总是以拒绝Heroku推送而告终,没有检测到支持Cedar的应用程序 当我推送根目录中带有“index.php”的
/
/libraries/
/other-nonpublic-stuff/
/webroot/
如何将/webroot/
设置为文档的根目录,以便在我的herokuapp的URL下仅提供其内容
我认为Procfile
可能是实现这一点的方法,但它并没有真正的文档化。
已经尝试过类似的事情
web: php webroot/
或
或
在Procfile
中,但我总是以拒绝Heroku推送而告终,没有检测到支持Cedar的应用程序
当我推送根目录中带有“index.php”的repo时,它工作正常,heroku ps
只显示一个运行“boot.sh”的web进程,但即使这样,Procfile也明显被忽略,heroku提供“/”而不是“/webroot”。因此,对于如何设置我的Procfile
,我并没有给出任何提示:
Process State Command
------- --------- ----------
web.1 up for 2h sh boot.sh
我通过heroku run bash
登录到我的“实例”控制台,并执行了cat boot.sh
。其中包括:
sed -i 's/Listen 80/Listen '$PORT'/' /app/apache/conf/httpd.conf
for var in `env|cut -f1 -d=`; do
echo "PassEnv $var" >> /app/apache/conf/httpd.conf;
done
touch /app/apache/logs/error_log
touch /app/apache/logs/access_log
tail -F /app/apache/logs/error_log &
tail -F /app/apache/logs/access_log &
export LD_LIBRARY_PATH=/app/php/ext
export PHP_INI_SCAN_DIR=/app/www
echo "Launching apache"
exec /app/apache/bin/httpd -DNO_DETACH
因此,Heroku推送被拒绝的问题,没有检测到Cedar支持的应用程序错误(当“/”中没有.php文件时),显然可以通过将php\u INI\u SCAN\u DIR
更改为“/app/www/webroot”来解决,但这是a)不可能的,b)无法解决使用“/webroot”作为docroot的问题。为了解决这个问题,我还必须修改“/app/apache/conf/httpd.conf”
有什么建议吗?:)
谢谢,
Josh您需要使用mod_rewrite在Heroku上提供“webroot”的内容。在.htaccess文件中尝试以下操作:
RewriteEngine On
RewriteRule ^\.htaccess$ - [F]
RewriteCond %{REQUEST_URI} =""
RewriteRule ^.*$ /webroot/index.php [NC,L]
RewriteCond %{REQUEST_URI} !^/webroot/.*$
RewriteRule ^(.*)$ /webroot/$1
RewriteCond %{REQUEST_FILENAME} -f
RewriteRule ^.*$ - [NC,L]
RewriteRule ^public/.*$ /webroot/index.php [NC,L]
为了避免“未检测到Cedar支持的应用程序”错误,我刚刚在存储库的根目录中创建了一个新的index.php文件。这个文件包含什么并不重要,但我添加了一些提醒,在我自己的应用程序中记录这些设置细节
希望有帮助 它实际上可以归结为创建一个自定义boot.sh并指向Procfile以在默认值上运行它。我在github上将其与一个基本结构结合在一起:
它包括一个钩子,可以使用您自己的conf文件,所以请随意使用它,并让我知道 我以为Heroku不能与php一起工作。我错了吗?他们从一段时间以来一直在默默地支持php。因为他们正在与Facebook合作。我想我可以用Procfile来实现这一点,但是没有专门针对php的文档记录其用法,甚至没有这么安静。这里说明了PHP:PHP应用程序似乎完全忽略了Procfile:-(他们也支持通用Lisp吗?在项目根目录中创建文件Procfile(无扩展名),并将这一行添加到其中。然后将该文件推送到Heroku存储库中。这个解决方案对我有效。
web: vendor/bin/heroku-php-apache2 webroot/
RewriteEngine On
RewriteRule ^\.htaccess$ - [F]
RewriteCond %{REQUEST_URI} =""
RewriteRule ^.*$ /webroot/index.php [NC,L]
RewriteCond %{REQUEST_URI} !^/webroot/.*$
RewriteRule ^(.*)$ /webroot/$1
RewriteCond %{REQUEST_FILENAME} -f
RewriteRule ^.*$ - [NC,L]
RewriteRule ^public/.*$ /webroot/index.php [NC,L]
web: vendor/bin/heroku-php-apache2 webroot/