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);
}
}
}
?>
