Webサイトリニューアル等でURLが変更になった場合、(DNS切替後も)検索エンジンの結果はしばらくは 旧URLを表示する可能性が高いため、旧URLでアクセスされても新URLへRedirectする設定が必要と なります。 Apacheのmod_rewrite機能を利用してURLの変更内容に応じてRedirect設定する方法を記載します。 正規表現の利用が可能です。 OS: RedHat EL 6.4(64-bit) Apache: 2.2.15
1) ディレクトリ変更
旧URL → 新URL/products → /services
RewriteRule ^/products/(.*)\.html$ /services/$1.html [R=301,L](.*)は0文字以上の文字列にマッチする正規表現。$1に代入される。
例)
http://redirect-test.com/products/aaa/index.html → http://redirect-test.com/services/aaa/index.html
http://redirect-test.com/products/bbb/index.html → http://redirect-test.com/services/bbb/index.html
2) 階層変更(深くなる場合)
/info → /about/infoRewriteRule ^/info/(.*)\.html$ /about/info/$1.html [R=301,L]例)
http://redirect-test.com/info/index.html → http://redirect-test.com/about/info/index.html
http://redirect-test.com/info/guide.html → http://redirect-test.com/about/info/guide.html
3) ファイルパス変更(正規表現使用せず)
/info/map.html → /main/map/index.html/info/img/map.gif → /main/map/img/map.gif
RewriteRule ^/info/map.html$ /main/map/index.html [R=301,L]例)
http://redirect-test.com/info/map.html → http://redirect-test.com/main/map/index.html
※RewriteRule設定は上の行から評価されるので2)の設定より先に記載する必要がある。
※画像(http://redirect-test.com/info/img/map.gif)は直接リンクされることは少ないので一般的にはリダイレクト不要。
4) 階層変更(浅くなる場合)
/main/csr → /csrRewriteRule ^/main/csr/(.*)$ /csr/$1 [R=301,L]例)
http://redirect-test.com/main/csr/index.html → http://redirect-test.com/csr/index.html
5) ディレクトリ統合
/download/doc → /about/library/download/pdf → /about/library
RewriteRule ^/download/(doc|pdf)/(.*)$ /about/library/$2 [R=301,L](doc|pdf)⇒$1、(.*)⇒$2に代入される。$1を使用しない記述方法も可能。
例)
http://redirect-test.com/download/doc/catalog.doc → http://redirect-test.com/about/library/catalog.doc
http://redirect-test.com/download/pdf/catalog.pdf → http://redirect-test.com/about/library/catalog.pdf
6) 中間ディレクトリ追加
/news/201*****.html → /news/201*/201*****.htmlRewriteRule ^/news/2011([0-9][0-9][0-9][0-9])\.html$ /news/2011/2011$1.html [R=301,L] RewriteRule ^/news/2012([0-9]{4})\.html$ /news/2012/2012$1.html [R=301,L] RewriteRule ^/news/2013(\d{4})\.html$ /news/2013/2013$1.html [R=301,L]([0-9][0-9][0-9][0-9])と([0-9]{4})と(\d{4})は同じ処理内容となる。
例)
http://redirect-test.com/news/20110912.html → http://redirect-test.com/news/2011/20110912.html
http://redirect-test.com/news/20120307.html → http://redirect-test.com/news/2012/20120307.html
http://redirect-test.com/news/20130423.html → http://redirect-test.com/news/2013/20130423.html
※年別にディレクトリでまとめる場合など
リダイレクトループに要注意!!
上記の6)の設定として安易に下記のようにRewriteRuleを設定すると、リダイレクトループが発生してしまいます。RewriteRule ^/news/(.*)\.html$ /news/2013/$1.html [R=301,L]
くれぐれも気をつけましょう。
■テスト用Webサイトコンテンツの確認
[root@rhel-web ~]# find /var/www/html/ -type f /var/www/html/csr/index.html /var/www/html/about/info/guide.html /var/www/html/about/info/index.html /var/www/html/about/library/catalog.doc /var/www/html/about/library/catalog.pdf /var/www/html/index.html /var/www/html/main/map/img/map.gif /var/www/html/main/map/index.html /var/www/html/news/2012/20120830.html /var/www/html/news/2012/20120307.html /var/www/html/news/2012/20120715.html /var/www/html/news/2012/20121129.html /var/www/html/news/2013/20130423.html /var/www/html/news/2013/20130613.html /var/www/html/news/2011/20111026.html /var/www/html/news/2011/20110912.html /var/www/html/news/2011/20111127.html /var/www/html/services/bbb/index.html /var/www/html/services/services.html /var/www/html/services/aaa/index.html [root@rhel-web ~]#※DocumentRootは/var/www/html です。
■mod_rewriteを有効にする
[root@rhel-web ~]# grep -n mod_rewrite /etc/httpd/conf/httpd.conf 190:LoadModule rewrite_module modules/mod_rewrite.so [root@rhel-web ~]#httpd.confの190行目あたり。上記行がコメントアウトされていないこと。(環境により行数は異なる)
■redirect.conf
httpd.confに記述してもよいが、リダイレクト設定を別ファイル(redirect.conf)にまとめる。[root@rhel-web ~]# cat /etc/httpd/conf.d/redirect.conf RewriteEngine on RewriteRule ^/products/(.*)\.html$ /services/$1.html [R=301,L] RewriteRule ^/info/map.html$ /main/map/index.html [R=301,L] RewriteRule ^/info/(.*)\.html$ /about/info/$1.html [R=301,L] RewriteRule ^/main/csr/(.*)$ /csr/$1 [R=301,L] RewriteRule ^/download/(doc|pdf)/(.*)$ /about/library/$2 [R=301,L] RewriteRule ^/news/2011([0-9][0-9][0-9][0-9])\.html$ /news/2011/2011$1.html [R=301,L] RewriteRule ^/news/2012([0-9]{4})\.html$ /news/2012/2012$1.html [R=301,L] RewriteRule ^/news/2013([0-9]{4})\.html$ /news/2013/2013$1.html [R=301,L] [root@rhel-web ~]#
★(参考)旧URLの表示はそのままでディレクトリ階層だけ変更したい場合
この場合、上述のredirect.confファイルはincludeさせない。[root@rhel-web ~]# cat /etc/httpd/conf.d/alias.conf Alias /products /var/www/html/services Alias /info/map.html /var/www/html/main/map/index.html Alias /info/img/map.gif /var/www/html/main/map/img/map.gif Alias /info /var/www/html/about/info Alias /main/csr /var/www/html/csr Alias /download/doc /var/www/html/about/library Alias /download/pdf /var/www/html/about/library AliasMatch ^/news/2011([0-9]{4})\.html$ /var/www/html/news/2011/2011$1.html AliasMatch ^/news/2012([0-9]{4})\.html$ /var/www/html/news/2012/2012$1.html AliasMatch ^/news/2013([0-9]{4})\.html$ /var/www/html/news/2013/2013$1.html [root@rhel-web ~]#※redirect.confとalias.confを両方includeさせた場合は、redirect.confの設定が優先されました。
redirect.confとalias.confは別名でもかまいません。この情報がお役にたてれば幸いです。
0 件のコメント:
コメントを投稿