URLを統一(WWWありなしとスラッシュありなし)
開発環境:CakePHP2.5.1
SEOを考慮するならURLの統一はしておきたいところです。
wwwありにするかなしにするか、URLの最後のスラッシュをありにするかなしにするか。
共にどちらでも構いませんが、サイトとして統一されていることが大切になってきます。
wwwあり・なしの統一
wwwをつけるかつけないかの設定は.htaccessに記載します。
app/webroot/.htaccessに2行を追加します。
wwwありの場合
<IfModule mod_rewrite.c> RewriteEngine On RewriteCond %{HTTP_HOST} ^example\.com RewriteRule (.*) http://www.example.com/$1 [R=301,L] RewriteCond %{REQUEST_FILENAME} !-d RewriteCond %{REQUEST_FILENAME} !-f RewriteRule ^ index.php [L] </IfModule>
wwwなしの場合
<IfModule mod_rewrite.c> RewriteEngine On RewriteCond %{HTTP_HOST} ^www\.example\.com RewriteRule (.*) http://example.com/$1 [R=301,L] RewriteCond %{REQUEST_FILENAME} !-d RewriteCond %{REQUEST_FILENAME} !-f RewriteRule ^ index.php [L] </IfModule>
スラッシュあり・なしの統一
URLの最後にスラッシュをつけるかどうかは、app/Controller/AppController.phpのbeforeFilterメソッド内に記載します。
スラッシュありの場合
<?php public function beforeFilter() { if (isset($this->request->url)) { $uri = $this->request->url; if (!empty($uri) && substr($uri, -1) != '/') { $this->redirect('/' . $uri . '/', 301); } } } ?>
スラッシュなしの場合
<?php public function beforeFilter() { if (isset($this->request->url)) { $uri = $this->request->url; if (!empty($uri) && substr($uri, -1) == '/') { $this->redirect('/' . preg_replace('/(.*?)\/\z/', '$1', $uri), 301); } } } ?>