将任何域重定向到 HTTPS 和特定路径

问题描述

我正在寻找一段代码重定向任何域(通配符 ish),而不仅仅是特定域,以便重定向重定向到 HTTPS 和特定路径。

我尝试了很多代码,但我能找到的几乎 90% 的搜索结果都是用于重定向特定域的。

我为什么需要这个?我们使用 envoyer 将 Statamic 部署到我们的 cpanel 服务器。我们将其用于我们拥有的每一位客户。例如,我们 Statamic 实例的 url 是 cms.example.com。我需要将其重定向https://cms.example.com/cp,但它也可以是 cms.totallydifferent.co.uk/cp,我一生都找不到合适的示例。

我让这段代码(如下)运行了一段时间,但它不可靠。它有时有效,但大部分时间无效。

<IfModule mod_rewrite.c>
    RewriteEngine On
    RewriteCond %{HTTPS} !=on
    RewriteRule ^ https://%{HTTP_HOST}%{REQUEST_URI}cp [R=301,L]
</IfModule>

根据要求提供完整的 .htaccess 文件

SetEnv COMPOSER_HOME '/opt/cpanel/composer/bin'
<IfModule mod_rewrite.c>
    <IfModule mod_negotiation.c>
        Options -MultiViews -Indexes
    </IfModule>

    RewriteEngine On

    RewriteCond %{HTTPS} !on [OR]
    RewriteCond %{REQUEST_URI} !^/cp [NC]
    RewriteRule ^ https://%{HTTP_HOST}/cp [R=301,L]

    # Redirect Trailing Slashes If Not A Folder...
    RewriteCond %{REQUEST_FILENAME} !-d
    RewriteCond %{REQUEST_URI} (.+)/$
    RewriteRule ^ %1 [L,R=301]

    # Send Requests To Front Controller...
    RewriteCond %{REQUEST_FILENAME} !-d
    RewriteCond %{REQUEST_FILENAME} !-f
</IfModule>

# ------------------------------------------------------------------------------
# Cache-Control Headers
# ------------------------------------------------------------------------------

<filesMatch "\.(gif|jpg|png|svg|woff)$">
    Header set Cache-Control "max-age=31536000"
</filesMatch>

谁能指出我正确的方向?

亲切的问候

解决方法

你可以用 2 个条件加入 OR 子句试试这个规则:

RewriteEngine On

# fix css/js
RewriteRule ^cp/(.+\.(?:css|js|png|jpe?g|gif))$ https://%{HTTP_HOST}/$1 [L,NC,R=301]

RewriteCond %{HTTPS} !on [OR]
RewriteCond %{THE_REQUEST} !\s/+cp [NC]
RewriteCond %{HTTP_HOST} ^cms\. [NC]
RewriteRule !\.(?:css|js|png|jpe?g|gif)$ https://%{HTTP_HOST}/cp [R=301,L,NC]

在测试此更改之前,请确保这是您的最高规则并清除浏览器缓存。