如何在PHP中重定向到Heroku时保留完整的URL?

时间:2014-02-03 11:36:10

标签: php redirect heroku

也许我没有使用正确的技术来完成任务(如果你对我想要实现的目标有任何建议,那也是受欢迎的。)

我在http://some-app.herokuapp.com的Heroku上有一个应用程序。我拥有域some-app.com,它当前指向共享主机(我收到电子邮件@some-app.com并在http://assets.some-app.com中存储静态文件)。

为了将域重定向到Heroku上的应用,我在www.some-app.com的共享主机上添加了一个新的CNAME,重定向到http://some-app.herokuapp.com。这很有效。

现在,如果我导航到http://some-app.com,我就不会被重定向(这是正常的,'裸'域名指向我的共享主机)。因此,在我的共享主机上,some-app.com/public_html/内添加了以下index.php文件:

<?php 
header("Location: http://www.some-app.com"); 

效果很好,http://some-app.com重定向到http://www.some-app.com,然后通过CNAME正确打开http://some-app.herokuapp.com,将www.some-app.com保留在浏览器的地址栏中。

我遇到困难的是:尽管http://www.some-app.com/some-dir/效果很好,但http://some-app.com/some-dir不会重定向。相反,我得到了404。

如何在共享主机上保留我的电子邮件和静态文件的同时正确处理此问题(基于cpanel,如果有帮助的话)。

谢谢。

1 个答案:

答案 0 :(得分:0)

经过大量的搜索,我发现了最优雅的方式。将.htaccess文件放在public_html的根目录下,其中包含以下内容:

RewriteCond %{HTTP_HOST} !^$
RewriteCond %{HTTP_HOST} !^www\. [NC]
RewriteCond %{HTTPS}s ^on(s)|
RewriteRule ^ http%1://www.%{HTTP_HOST}%{REQUEST_URI} [R=301,L]