我目前正在进行重写工作example.com
,整个网站都是 HTTPS,使用如下命令:
RewriteEngine On
RewriteCond %{HTTPS} !=on
RewriteRule ^/?(.*) https://%{SERVER_NAME}/$1 [R,L]
我需要这个网站上的大量文件,可以通过第二个域名和 HTTP 访问,例如:http://example.net/files/....
我尝试添加example.net
但ServerAlias
当然这只是重定向然后重写为https://example.net/files
我从互联网上复制了重写规则,但不确定修改它的正确方法。
我正在考虑将重写规则改为如下内容:
RewriteRule ^example.com/?(.*) https://example.com/$1 [R,L]
这样,只有当 URL 包含以下内容时才会重写example.com
,那么我是否需要针对 TLD 域本身而不是这个通配符条目的重写规则?
请问有人能帮忙以正确的方式实现这一点,以便对ServerAlias
(example.net
)的请求不会被重写吗?
答案1
如果你想将两个域名指向相同的内容。例如example.com
和example.net
。然后为每个域名创建单独的虚拟主机,但将它们指向相同的文档根目录. 添加一个用于 HTTP 的 80 VirtualHost 条目 ( http://example.com
) 和另一个用于 HTTPS 的 443 域条目 ( https://example.net
),并分配所需的 SSL 条目。
答案2
正如 Sunil 所建议的,您可以创建单独的虚拟主机,然后 SSL 重定向将仅发生在第一个虚拟主机(即example.com
端口 80)中。(您也可以避免使用 mod_rewrite 而只使用单个 mod_alias Redirect
,这将是更好的选择。)
ServerAlias
不过,你也可以按照你的建议创建一个example.net
(你的其他域)并包含状况(即REwriteCond
指令)在当前重定向中仅重定向域example.com
。例如:
RewriteEngine On
RewriteCond %{HTTPS} !=on
RewriteCond %{HTTP_HOST} ^(www\.)?example\.com [NC]
RewriteRule ^/?(.*) https://%{SERVER_NAME}/$1 [R,L]
请注意,一旦您确认它运行正常,这实际上应该是一个 301(永久)重定向。即[R=301,L]
。。