htaccess 从 url 中删除段并重定向到 https 和 www

htaccess remove segment from url and redirect to https and www

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

可从域访问最新部署。com/current/public

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

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

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

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

*** 更新 ***

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

RewriteEngine on
RewriteRule ^(.*)$ current/public/
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 文件以从管理员 urls 中删除 'current/public'?

您的 http->httpswww 添加规则应该是最重要的规则,以便它适用于原始 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/ [L]

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

同时在 /current/public/.htaccess 中添加此重定向规则:

RewriteCond %{THE_REQUEST} /current/public/(\S+) [NC]
RewriteRule ^ /%1 [R=301,L,NE]