Laravelでは、URL末尾にスラッシュを付けてアクセスをすると、スラッシュなしURLへリダイレクトされます。
これを「スラッシュなしでアクセスした場合は、スラッシュ付きにリダイレクトする」ように変更する方法を紹介します。
このスラッシュはトレイリングスラッシュ(trailing slash)と呼ばれます。
この振る舞いは、.htaccessによって制御されていますので、public/.htaccessを書き換えます。
.htaccess
Before
<IfModule mod_rewrite.c>
<IfModule mod_negotiation.c>
Options -MultiViews -Indexes
</IfModule>
RewriteEngine On
# Handle Authorization Header
RewriteCond %{HTTP:Authorization} .
RewriteRule .* - [E=HTTP_AUTHORIZATION:%{HTTP:Authorization}]
# Redirect Trailing Slashes If Not A Folder...
RewriteCond %{REQUEST_FILENAME} !-d
RewriteCond %{REQUEST_URI} (.+)/$
RewriteRule ^ %1 [L,R=301]
# Handle Front Controller...
RewriteCond %{REQUEST_FILENAME} !-d
RewriteCond %{REQUEST_FILENAME} !-f
RewriteRule ^ index.php [L]
</IfModule>
#Redirect Trailing Slashesの部分で、
- 指定されたディレクトリが存在せず(既存ディレクトリへのアクセスではなく)
- 末尾がスラッシュで終わっている
場合に末尾のスラッシュを削除しています。
この部分をコメントアウトして、次のように追記します。
After
<IfModule mod_rewrite.c>
<IfModule mod_negotiation.c>
Options -MultiViews -Indexes
</IfModule>
RewriteEngine On
# Handle Authorization Header
RewriteCond %{HTTP:Authorization} .
RewriteRule .* - [E=HTTP_AUTHORIZATION:%{HTTP:Authorization}]
# Redirect Trailing Slashes If Not A Folder...
#RewriteCond %{REQUEST_FILENAME} !-d
#RewriteCond %{REQUEST_URI} (.+)/$
#RewriteRule ^ %1 [L,R=301]
# Add Trailing Slash If Not A File...
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_URI} (.+[^/])$
RewriteRule ^ %1/ [L,R=301]
# Handle Front Controller...
RewriteCond %{REQUEST_FILENAME} !-d
RewriteCond %{REQUEST_FILENAME} !-f
RewriteRule ^ index.php [L]
</IfModule>
# Add Trailing Slashの部分が追記した部分です。
- 指定されたファイルが存在せず(既存ファイルへのアクセスではなく)
- 末尾が/以外で終わっている
場合には、末尾にスラッシュをつけて301リダイレクトをします。
トレイリングスラッシュの有無を統一するためのリダイレクトに、301リダイレクトを使うことはGoogleの中の人が勧めている方法です。
以上、LaravelでURL末尾のスラッシュを付ける方法。でした。