10

我正在把头发拉出来解决应该是一个非常简单的问题。我们通过 F5 BigIP 运行 WebSphere IHS (Apache)。BigIP 正在为我们进行 https 翻译。我们的网址(已更改为网络,无效)是https://superniftyserver.com/lawson/portal

当有人在门户后没有斜杠输入时,Apache 假定“门户”是一个文件而不是一个目录。当 Apache 发现它是什么时,它会发送 301 永久重定向。但由于 Apache 只知道 http,它会将 URL 作为http://superniftyserver.com/lawson/portal/发送,这会产生问题。

所以我为 mod_rewrite 尝试了服务器级别的 httpd.conf 更改,这是我尝试过的几十种组合之一。

RewriteRule 上的 RewriteEngine ^/lawson/portal(.*) /lawson/portal/$1

我也试过 RewriteRule ^/lawson/portal$ /lawson/portal/

在许多其他事情中......我错过了什么?

4

4 回答 4

6

如果您无法获得有关 RewriteRule 语法的答案,这里有两个其他选项供您选择: 在 BigIp 上编写一个自定义 iRule(请参阅F5 DevCentral),查找 301 响应并将它们转换为 SSL;让 URL 传递到您的 WebSphere 服务器并执行发送 HTTPS 的编程重定向。但是,由于 F5 终止 SSL 连接,您必须设置您配置的自定义标头(请参阅PQ86347),以便 Java request.getScheme() 可以按预期工作。

于 2008-10-01T18:02:30.197 回答
5

固定的!

SOL6912:配置 HTTP 配置文件以重写 URL,以便来自 HTTP 服务器的重定向指定 HTTPS 协议


更新时间:2007 年 8 月 7 日上午 12:00

ClientSSL 虚拟服务器通常配置为接受来自客户端的 HTTPS 连接、解密 SSL 会话并将未加密的 HTTP 请求发送到 Web 服务器。

当请求的 URI 不包含尾部斜杠(URI 末尾的正斜杠,例如 /)时,某些 Web 服务器会生成礼貌重定向。如果没有尾部斜杠,Web 服务器将首先将 URI 中指定的资源视为文件。如果找不到该文件,则 Web 服务器可能会搜索具有相同名称的目录,如果找到,则将带有尾部斜杠的 HTTP 302 重定向响应发送回客户端。重定向将以 HTTP 模式而不是 HTTPS 模式返回给客户端,从而导致 SSL 会话失败。

以下是 HTTP 302 重定向响应如何导致 SSL 会话失败的示例:

· 要请求 SSL 会话,用户键入https://www.f5.com/stuff后不带斜杠。

· 客户端浏览器向位于 BIG-IP LTM 系统上的 ClientSSL 虚拟服务器发送 SSL 请求。

· BIG-IP LTM 系统然后对请求进行解密并向网络服务器发送一个 GET /stuff 命令。

· 由于 Web 服务器上不存在 /stuff 文件,但存在 /stuff/ 虚拟目录,因此 Web 服务器为该目录发送 HTTP 302 重定向响应,但在资源的尾部附加一个斜杠。当 Web 服务器发送 HTTP 302 重定向响应时,它指定了 HTTP(不是 HTTPS)。

· 当客户端收到 HTTP 302 重定向响应时,它会向指定 HTTP(不是 HTTPS)的 BIG-IP LTM 虚拟服务器发送一个新请求。因此,SSL 连接失败。

配置 HTTP 配置文件以重写 URL

在 BIG-IP LTM 版本 9.x 中,您可以配置 HTTP 配置文件以重写 URL,以便来自 HTTP 服务器的重定向指定 HTTPS 协议。为此,请执行以下过程:

  1. 登录到配置实用程序。

  2. 单击本地流量。

  3. 单击配置文件。

  4. 单击创建按钮。

  5. 键入配置文件的名称。

  6. 从父配置文件下拉菜单中选择 http。

  7. 在设置下,将重定向重写设置为全部、匹配或节点,具体取决于您的配置

例如:

o 选择全部以将任何 HTTP 301、302、303、305 或 307 重定向重写为 HTTPS

o 选择匹配以在请求和重定向的路径和查询 URI 组件相同时重写重定向(尾部斜杠除外)

o 当重定向 URI 包含节点 IP 地址而不是主机名并且您希望系统将其更改为虚拟服务器地址时,选择 Node to rewrite redirects

  1. 单击完成。

您现在必须将新的 HTTP 配置文件与 ClientSSL 虚拟服务器相关联。

于 2008-10-01T20:13:06.683 回答
2

试试这个:

# Trailing slash problem
RewriteCond    %{DOCUMENT_ROOT}%{REQUEST_FILENAME} -d
RewriteRule    ^(.+[^/])$           https://<t:sitename/>$1/ [redirect,last]
于 2010-12-17T18:40:20.490 回答
0
LoadModule rewrite_module                modules/mod_rewrite.so

确保该行位于 httpd.conf 文件中的某个位置

于 2008-10-01T18:02:07.373 回答