1

很难找到满足以下 3 个条件的组合。哪些 Rewrite 规则和条件将满足条件?(我已经对规则不起作用感到惊讶。)

  1. www 从所有请求中剥离
  2. https 用于对主要请求的所有请求
  3. http对子域的所有请求(在主站点的子文件夹中) subdomain.com

访问:

RewriteEngine On
RewriteBase /

RewriteCond %{HTTPS} off
RewriteCond %{HTTP_HOST} ^www\.primary\.mobi [NC,OR]
RewriteCond %{HTTP_HOST} ^primary\.mobi [NC,OR]
RewriteCond %{HTTP_HOST} !^(www\.)?subdomain\.com [NC]
RewriteRule .* https://%{HTTP_HOST}%{REQUEST_URI} [R=301,L]

以上不剥离 www 并将 www.subdomain 发送到 https。

欢迎解释。试图了解 apache mod_rewrite 手册页并尝试了几种方法但均未成功。

4

1 回答 1

1

您可以捕获域并在 RewriteRule 中使用它。HTTP_REQUEST 在替换部分不可用,而仅在 RewriteCond 指令中可用。

我不确定,但您可以尝试将其拆分为两个.htaccess文件。这个进入主目录

RewriteEngine On

# remove www. from HTTPS requests
RewriteCond %{HTTPS} on
RewriteCond %{HTTP_HOST} ^www\.(primary\.mobi)$ [NC]
RewriteRule .* https://%1/$0 [R,L]

# redirect HTTP requests to HTTPS
RewriteCond %{HTTPS} off
RewriteCond %{HTTP_HOST} ^(?:www\.)?(primary\.mobi)$ [NC]
RewriteRule .* https://%1/$0 [R,L]

这是.htaccess子域文件夹中的

RewriteEngine On

# remove www. from HTTP requests
RewriteCond %{HTTP_HOST} ^www\.(subdomain\.com)$ [NC]
RewriteRule .* http://%1/$0 [R,L]

# redirect HTTPS requests to HTTP
RewriteCond %{HTTPS} on
RewriteCond %{HTTP_HOST} ^(?:www\.)?(subdomain\.com)$ [NC]
RewriteRule .* http://%1/$0 [R,L]

在没有301 的情况下测试您的规则,因为浏览器会缓存 301 结果并使测试变得更加困难。R=301在您对规则满意之前不要添加。

规范主机名中描述了一些替代方案,尤其是第一个,使用虚拟主机,看起来很有希望

<VirtualHost *:80>
    ServerName www.primary.mobi
    Redirect / https://primary.mobi/
</VirtualHost>

<VirtualHost *:80>
    ServerName primary.mobi
</VirtualHost>

<VirtualHost *:80>
    ServerName www.subdomain.com
    Redirect / http://subdomain.com/
</VirtualHost>

<VirtualHost *:80>
    ServerName subdomain.com
</VirtualHost>

我不知道这对你是否可行,但你可以试试。

于 2013-01-17T17:30:42.233 回答