我有一个内部域: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]