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

How to setup request proxy using URL rewriting

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

http://dev.gworks.mobi/

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

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/*,而无需重定向。

我已经在 dev.gworks.mobi 站点的 .htaccess 中尝试过:

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

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

任何人都可以帮助我实现我的用例吗?

试试这个:

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/ [L,QSA]

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

如果您想以某种方式屏蔽 URI,使访问者无法看到她正在访问身份验证应用程序,则需要在 :[=22] 位置添加 P flag. Please note that it needs Apache's mod_proxy module =]

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

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

404

如果一切就绪但您仍然收到 404 错误,请确保目标 URL 没有首先抛出 404 错误。

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

我想到的最后一件事是,某些 Web 应用程序并不是以计算 URI 地址的方式构建的。主机以及端口号可能在配置文件中的某处进行了硬编码。确保身份验证应用能够 运行 来自另一个 URL 而无需编辑配置。

测试

您可以test the rewriterule在线: