URL重写以替换原始网站的URL

时间:2014-03-18 15:11:29

标签: apache .htaccess url mod-rewrite mod-proxy

我在OpenShift上托管了一个网站,其网址为https://myproject.myname-rhcloud.com/myapp。我通过git部署,它工作正常,但URL不容易记住。

然后我买了一个域名(比如http://www.first-last.fr),有一个有限的Apache托管,允许我在那里部署我自己的.htaccess

我尝试从注册商处进行重定向,但这最终出现在一个隐藏页面标题的HTML框架中:标题始终显示根网址,即使在网站的子文件夹中也是如此,所以我看到{ {3}}即使我正在访问http://www.first-last.fr

我想要的是通过我的新网址(http://www.first-last.fr/myapp/glossary)访问真实网站(https://myproject.myname-rhcloud.com/myapp),但有以下限制:

理想情况下,这不需要触摸原始网站。

我检查了很多类似的问题,但我没有找到关于这个具体要求的明确答案(我很乐意错,如果有的话请告诉我好的链接)!

我还尝试进行网址重写,但这不成功,当我输入http://www.first-last.fr/myapp/glossary我的资源管理器显示http://www.first-last.fr/myapp时。

编辑:我试过mod_proxy,就像杰克建议的那样。这是我的.htaccess:

SetEnv PHP_VER 5_TEST
SetEnv REGISTER_GLOBALS 0

Options +FollowSymLinks -MultiViews

ProxyPreserveHost On

# Turn mod_rewrite on
RewriteEngine On
# RewriteBase /
RewriteCond %{HTTP_HOST} ^(www\.)?first-last\.fr$ [NC]
RewriteRule ^ https://myproject.myname.rhcloud.com%{REQUEST_URI} [L,P]

# ProxyPass / https://myproject.myname.rhcloud.com/
ProxyPassReverse / https://myproject.myname.rhcloud.com/

我也试过更简单的版本:

SetEnv PHP_VER 5_TEST
SetEnv REGISTER_GLOBALS 0

Options +FollowSymLinks -MultiViews

ProxyPreserveHost On
ProxyPass / https://myproject.myname.rhcloud.com/
ProxyPassReverse / https://myproject.myname.rhcloud.com/

但我在Apache日志中遇到了同样的错误:ProxyRequests not allowed here。你有什么想法吗?

2 个答案:

答案 0 :(得分:1)

看看mod_proxy。例如,你可以做这样的事情。这将在你的短域名的apache conf vhost配置中。查看文档以获取更多信息。

http://httpd.apache.org/docs/2.2/mod/mod_proxy.html

SSLProxyEngine On
ProxyPass / https://myproject.myname-rhcloud.com/myapp
ProxyPassReverse / https://myproject.myname-rhcloud.com/myapp

答案 1 :(得分:0)

一位朋友帮助我解决了这个问题:

SetEnv PHP_VER 5_TEST
SetEnv REGISTER_GLOBALS 0

Options +FollowSymLinks -MultiViews

# Turn mod_rewrite on
RewriteEngine On
RewriteRule ^/?(.*)$ http://myproject-myname.rhcloud.com/$1 [L,P]

这样可以使http://www.first-last.fr/myapp/http://myproject-myname.rhcloud.com/拥有正确的代理。但要注意,http://www.first-last.fr/myapp(不包括斜杠)不能作为代理工作并转换为" inner"站点。