1

我正在使用 Deployer 将 Craft CMS 站点部署到共享主机帐户。

最新部署可从 domain.com/current/public 访问

我的 .htaccess 文件如下所示,它从 url 中删除 current/public 并强制 https:

RewriteEngine on
RewriteRule ^(.*)$ current/public/$1
RewriteCond %{HTTP:X-Forwarded-Proto} !=https
RewriteRule .* https://%{HTTP_HOST}%{REQUEST_URI} [R=302,L]

我现在还需要重定向所有网址以使用 www

如何调整我的 .htaccess 以在所有网址上强制使用 www?

*** 更新 ***

我设法通过以下方法解决了上述问题:

RewriteEngine on
RewriteRule ^(.*)$ current/public/$1
RewriteCond %{HTTP:X-Forwarded-Proto} !=https [OR]
RewriteCond %{HTTP_HOST} !^www\.
RewriteCond %{HTTP_HOST} ^(?:www\.)?(.+) [NC]
RewriteRule ^ https://www.%1%{REQUEST_URI} [R=301,L]

当我转到example.com/admin时,它会重定向到example.com/current/public/admin。如何调整我的 htaccess 文件以从管理 url 中删除“当前/公共”?

4

1 回答 1

1

您的http->https添加www规则应该是最重要的规则,以便它适用于原始 URI,而不是由于其他规则而重写的 URI。

RewriteEngine on

RewriteCond %{HTTP:X-Forwarded-Proto} !=https [OR]
RewriteCond %{HTTP_HOST} !^www\. [NC]
RewriteCond %{HTTP_HOST} ^(?:www\.)?(.+) [NC]
RewriteRule ^ https://www.%1%{REQUEST_URI} [R=301,L,NE]

RewriteRule ^(.*)$ current/public/$1 [L]

确保在测试此规则之前清除浏览器缓存。

还将此重定向规则添加到/current/public/.htaccess

RewriteCond %{THE_REQUEST} /current/public/(\S+) [NC]
RewriteRule ^ /%1 [R=301,L,NE]
于 2020-07-06T06:29:11.113 回答