如何使用URL重写设置请求代理

时间:2016-12-26 13:05:11

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

我有一个位于以下网站的电子商务网站:

  

http://dev.gworks.mobi/

当客户点击登录链接时,浏览器会被重定向到另一个域,以便进行身份验证:

  

http://frock.gworks.mobi:8080/openam/XUI/#login/&goto=http%3A%2F%2Fdev.gworks.mobi%3A80%2Fcustomer%2Faccount%2Flogin%2Freferer%2FaHR0cDovL2Rldi5nd29ya3MubW9iaS8%2C%2F

我尝试将http://dev.gworks.mobi/*重写为http://frock.gworks.mobi:8080/openam/*,而不重定向。

我已经在.htaccess网站的dev.gworks.mobi中尝试了此操作:

<IfModule mod_rewrite.c>
    RewriteEngine On
    RewriteCond %{REQUEST_URI} ^/openam(.*)$ [NC]
    RewriteRule ^(.*)$ http://frock.gworks.mobi:8080/$1 [P,L]
</IfModule>

但是当我访问http://dev.gworks.mobi/openam时,它会显示404 page not found页。

有人可以帮助我实现我的用例吗?

1 个答案:

答案 0 :(得分:1)

试试这个:

RewriteEngine on
RewriteBase /

# Make sure it's not an actual file being accessed
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d

# Match the host
RewriteCond %{HTTP_HOST} ^dev\.gworks\.mobi

# Rewrite the request if it starts with "openam"
RewriteRule ^openam(.*)$ http://frock.gworks.mobi:8080/$1 [L,QSA]

这会将对dev.gworks.mobi/openam的所有请求重写为frock.gworks.mobi:8080

如果要以访问身份验证应用程序不可见的方式屏蔽URI,则需要添加P flag请注意,它需要Apache的mod_proxy module

RewriteRule ^openam(.*)$ http://frock.gworks.mobi:8080/$1 [P,L,QSA]

如果它不是最后一次重写规则,请随意删除L标志。有关详细信息,请参阅RewriteRule Flags

404

如果一切就绪并且您仍然遇到404错误,请确保目标网址首先不会引发404错误。

其次,检查您是否仍然使用正确的引用URI设置获得错误。如果未正确设置引荐来源,它可能会以抛出404的方式设计。如果是这种情况,我怀疑,您需要使用R标志并重定向而不是代理请求。

我想到的最后一件事,一些webapps并不是以找出URI地址的方式构建的。主机以及端口号可能在配置文件中的某处硬编码。确保可以从其他URL运行身份验证应用程序,而无需编辑配置。

测试

您可以在线test the rewriterule