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]

正規表現でUser Agent分岐 モバイル版を参照。

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]

最新の記事

プロフィール

流されるままにウェブ業界で仕事しています。主にLAPP環境でPHPを書いています。最近はjQueryで遊んでいます。
※動作確認について