htaccessはURLからセグメントを削除し、httpsとwwwにリダイレクトします

Jul 06 2020

Deployerを使用してCraftCMSサイトを共有ホスティングアカウントにデプロイしています。

最新のデプロイメントには、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を使用するには、すべてのURLもリダイレクトする必要があります

.htaccessを調整してすべてのURLに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から「current / public」を削除するにはどうすればよいですか?

回答

1 anubhava Jul 06 2020 at 13:29

あなた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/$1 [L]

このルールをテストする前に、必ずブラウザのキャッシュをクリアしてください。

また、このリダイレクトルールを/current/public/.htaccess:に追加します。

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