htaccessにmod_rewriteを設定
リダイレクト、リライト、ユーザエージェント分岐、301設定
SSL/非SSL 強制遷移
RewriteEngine on
# .html且つSSLは非SSLへ遷移
RewriteCond %{REQUEST_URI} .*\.html$
RewriteCond %{HTTPS} on
RewriteRule ^(.*)$ http://%{HTTP_HOST}%{REQUEST_URI} [R,L]
# .php且つ非SSLはSSLへ遷移
RewriteCond %{REQUEST_URI} .*\.php$
RewriteCond %{HTTPS} off
RewriteRule ^(.*)$ https://%{HTTP_HOST}%{REQUEST_URI} [R,L]
疑似URL
RewriteEngine on
# 指定ディレクトリはmain.phpを通る
RewriteRule (foo|bar|baz)(/?|/(.*))$ main.php [L]
# 指定ディレクトリはsub.phpを通る
RewriteRule (qux|quux|foobar)(/?|/(.*))$ sub.php [L]
# 指定拡張子とmain.php、sub.php以外はindex.phpを通る
RewriteRule !(\.(ico|js|css|gif|jpe?g|png|svg)|(main|sub)\.php)$ index.php
RewriteEngine On
# 指定ディレクトリはmain.phpを通る
RewriteCond %{REQUEST_URI} ^/foo(/?|/(.*))$ [OR]
RewriteCond %{REQUEST_URI} ^/bar(/?|/(.*))$ [OR]
RewriteCond %{REQUEST_URI} ^/baz(/?|/(.*))$
RewriteRule ^(.*)$ main.php [L]
# 指定ディレクトリはsub.phpを通る
RewriteCond %{REQUEST_URI} ^/qux(/?|/(.*))$ [OR]
RewriteCond %{REQUEST_URI} ^/quux(/?|/(.*))$ [OR]
RewriteCond %{REQUEST_URI} ^/foobar(/?|/(.*))$
RewriteRule ^(.*)$ sub.php [L]
RewriteEngine on
# 12345.pdfはpdf.php?prm=12345
RewriteRule ^([0-9]{5})\.pdf$ pdf.php?prm=$1 [PT,L]
# 12345/67890.csvはcsv.php?prm1=12345&prm2=67890
RewriteRule ^([0-9]{5})/([0-9]{5})\.csv$ csv.php?prm1=$1&prm2=$2 [PT,L]
ユーザエージェントによる制御
RewriteEngine on
# ユーザエージェント
RewriteCond %{HTTP_USER_AGENT} (iPhone|iPod|iPad|Android|Windows.Phone|BlackBerry|BB) [NC]
# mobileへ移動 /から/mobile/
# RewriteRule ^$ /mobile/ [R,L]
# mobileへ移動 /から/mobile/ /fooから/mobile/foo /foo/barから/mobile/foo/bar
RewriteRule ^(.*)$ /mobile/$1 [R,L]
301リダイレクト
RewriteEngine on
# 旧ドメインにアクセスしたら、新ドメインへ転送
RewriteCond %{HTTP_HOST} ^example.net
RewriteRule ^(.*) http://example.com/$1 [R=301,L]
URL変更
RewriteEngine on
# URL個別
RewriteRule ^foo/qux.html /bar/quux.html [R=301,L]
# ディレクトリ単位
RewriteRule ^foo/(.*)$ /bar/$1 [R=301,L]
外部からの画像の直接リンク禁止
RewriteEngine on
# リファラに何も含まれていない場合と指定のドメインの場合は表示
RewriteCond %{HTTP_REFERER} !^$
RewriteCond %{HTTP_REFERER} !^http://php\.o0o0\.jp [NC]
# 外部からアクセスした場合は代替画像を表示
RewriteRule \.(gif|jpe?g|png)$ /no_image.png [NC,L]
メンテナンス
// 503ページ
ErrorDocument 503 /maintenance.html
RewriteEngine on
RewriteCond %{REQUEST_URI} !^/maintenance.html$
# 特定のIP以外はメンテナンスへ
RewriteCond %{REMOTE_ADDR} !127\.0\.0\.1$
RewriteCond %{REMOTE_ADDR} !192\.168\.1\.0$
# 503でメンテナンスを表示
RewriteRule ^.*$ - [R=503,L]