最新のバージョンのSilverStripeでは、ファイルではuse server side rules for URL re-writingであり、Director::forceSSL();
および/またはDirector::forceWWW();
ではないことが推奨されています。信頼性が低いとみなされます。SilverStripe 4でwww、SSL、およびスラッシュを強制するには?
Apacheサーバーでは、論理的には.htaccess
ファイルで管理する必要があるようです。残念ながら、以下に示すスニペットは独立して書き換えを実行することができますが、1つのファイル内で連鎖または結合すると、wwwまたはhttpsのいずれの場合もスキップされるようです。
### SILVERSTRIPE START ###
### TRIMMED ROBOT/ERROR CODE ###
<IfModule mod_rewrite.c>
# Turn off index.php handling requests to the homepage fixes issue in apache >=2.4
<IfModule mod_dir.c>
DirectoryIndex disabled
DirectorySlash On
</IfModule>
SetEnv HTTP_MOD_REWRITE On
RewriteEngine On
RewriteBase '/'
RewriteRule .* - [E=HTTP_AUTHORIZATION:%{HTTP:Authorization}]
# Deny access to potentially sensitive files and folders
RewriteRule ^vendor(/|$) - [F,L,NC]
RewriteRule ^\.env - [F,L,NC]
RewriteRule silverstripe-cache(/|$) - [F,L,NC]
RewriteRule composer\.(json|lock) - [F,L,NC]
RewriteRule (error|silverstripe|debug)\.log - [F,L,NC]
# Process through SilverStripe if no file with the requested name exists.
# Pass through the original path as a query parameter, and retain the existing parameters.
# Try finding framework in the vendor folder first
RewriteCond %{REQUEST_URI} ^(.*)$
RewriteCond %{REQUEST_FILENAME} !-f
RewriteRule .* index.php
</IfModule>
### SILVERSTRIPE END ###
<IfModule mod_rewrite.c>
### FORCE TRAILING SLASH ###
### Source - https://paulund.co.uk/using-htaccess-to-force-trailing-slash ###
RewriteCond %{REQUEST_URI} /+[^\.]+$
RewriteRule ^(.+[^/])$ %{REQUEST_URI}/ [R=301,L]
### FORCE WWW ###
#### Modified from source https://paulund.co.uk/add-www-subdomain-to-all-urls-using-htaccess ###
RewriteCond %{HTTP_HOST} !^$
RewriteCond %{HTTP_HOST} !^www\. [NC]
RewriteCond %{HTTPS} off
RewriteRule^https://www.example.com%{REQUEST_URI} [R=301,L]
### FORCE SSL ###
RewriteCond %{HTTPS} off
RewriteRule^https://www.example.com/$1 [R=301,L]
</IfModule>
可能性のあるドキュメント化された.htaccessベースのソリューションは、https://stackoverflow.com/a/43052755/4137738 – wmk