使用 https 时重定向到指定端口

使用 https 时重定向到指定端口

我有一个内部域:cloud.flint.lo

我想实现以下目标:

If URL=http://cloud.filnt.lo
   Redirect to: https://cloud.flint.lo:5001/sub
If URL=https://cloud.flint.lo
   Redirect to: https://cloud.flint.lo:5001

我在 .htaccess 中写了这个,但只有第一种情况有效:

RewriteEngine On
RewriteCond %{SERVER_PORT} !^5001$
RewriteRule ^(.*)$ https://%{HTTP_HOST}:5001/$1 [L,R=301]
RewriteCond %{SERVER_PORT} !^443$                                                                                                                                                
RewriteRule ^(.*)$ https://%{SERVER_NAME}:5001/sub [L,R=301]

我也尝试使用“REQUEST_URI”来匹配 5001 端口,但也没有用。

RewriteCond %{HTTPS} on                                                                                                                                                     
RewriteCond %{REQUEST_URI} !^.*\:5001
RewriteRule ^(.*)$ https://%{SERVER_NAME}:5001/sub [L,R=301]

答案1

使用mod_rewrite似乎有点过头了。你可能要考虑使用重定向( 的一部分mod_alias) 来代替。

例如虚拟主机 1 (HTTP)

<VirtualHost *:80>

ServerName cloud.flint.lo

Redirect permanent / https://cloud.flint.lo:5001/sub/

</VirtualHost>

例如虚拟主机 2 (HTTPS)

<VirtualHost *:443>

ServerName cloud.flint.lo

Redirect permanent / https://cloud.flint.lo:5001/

</VirtualHost>

笔记

  • 任何 HTTPS 虚拟主机都可能需要一些额外的标准 SSL 声明(但这完全取决于您的配置)。

  • Redirect当然,示例语句可以简单地作为主 Apache 配置文件的一部分(特别httpd-ssl.conf是第二个示例)。

  • Redirect用来代替DocumentRoot

使用 Apache mod_rewrite

或者,如果您觉得 Apachemod_rewrite更适合您的用例,您可以尝试以下操作:

例如 HTTP 主机

RewriteEngine On
RewriteCond %{SERVER_PORT} ^80$                                                                                                                                                
RewriteRule ^(.*)$ {HTTP_HOST}:5001/sub$1 [L,R=301]

例如 HTTPS 主机

RewriteEngine On
RewriteCond %{SERVER_PORT} ^443$
RewriteRule ^(.*)$ https://%{HTTP_HOST}:5001$1 [L,R=301]

相关内容