heroku设置document_root

Jos*_*osh 4 php heroku

如果我有这样的目录结构:

/
/libraries/
/other-nonpublic-stuff/
/webroot/
Run Code Online (Sandbox Code Playgroud)

我如何设置/webroot/document_root,以便只在我的herokuapp的URL下提供它的内容?

我认为Procfile可能是实现这一目标的方法,但它并没有真正记录在案.已经尝试过像

web: php webroot/
Run Code Online (Sandbox Code Playgroud)

要么

web: sh boot.sh webroot/
Run Code Online (Sandbox Code Playgroud)

要么

web: sh webroot/
Run Code Online (Sandbox Code Playgroud)

Procfile,但我总是最终得到Heroku push rejected, no Cedar-supported app detected

当我在根目录中使用"index.php"推送一个repo时,它工作正常,heroku ps只显示一个运行"boot.sh"的Web进程,但即使这样,Procfile也会被忽略而heroku服务于"/"而不是"/根目录".所以不是真的暗示我如何设置我的Procfile:

Process  State      Command     
-------  ---------  ----------  
web.1    up for 2h  sh boot.sh  
Run Code Online (Sandbox Code Playgroud)

我通过登录到我的"实例"的控制台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
Run Code Online (Sandbox Code Playgroud)

所以Heroku push rejected, no Cedar-supported app detected错误的问题(当没有.php文件在"/"时显然可以通过更改PHP_INI_SCAN_DIR为"/ app/www/webroot"来解决,但那是a)不可能和b)无法解决使用"/webroot"作为docroot.为了解决这个问题,我还必须修改"/app/apache/conf/httpd.conf".

有什么建议?:)

谢谢,乔希

小智 5

你需要使用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]
Run Code Online (Sandbox Code Playgroud)

为了解决"没有检测到Cedar支持的应用程序"错误,我刚刚在我的存储库的根目录中创建了一个新的index.php文件.这个文件包含什么并不重要,但我添加了一些提醒来记录我自己的应用程序中的这些设置细节.

希望有所帮助!


Win*_*ian 5

它实际上归结为创建自定义boot.sh并指向Procfile以在默认情况下运行它.我在github上将它与一个准系统结构放在一起:https://github.com/winglian/Heroku-PHP

它包括一个使用你自己的conf文件的钩子,所以随意玩它并让我知道!