Apacheのリライトルールについて、実例を用いて解説します。
1. 基本的なリダイレクトルール
上記の例では、`home/`にアクセスすると`home.php`に、`login/`にアクセスすると`/auth/login.php`にリダイレクトされます。
2. より複雑なリダイレクト
この例では正規表現を使用し、`item-数字-数字.html`形式のURLが`item_list.php`に変換されます。 `$1`, `$2`, `$3`はそれぞれ正規表現内の括弧で指定された部分に対応しています。
3. 精度の高いリダイレクト
ここでの重点は`PT`(Pass Through)フラグです。これは次の処理に引き継ぐ役割を持っています。
4. リダイレクトフラグの詳細
以下のフラグが利用可能です:
- R[=code]:外部への強制リダイレクト(デフォルトは302)
- F:URLを禁止 (403)
- G:URLを削除済みとする (410)
- P:プロキシを使用する
- L:最後のルールとして処理を終了
- N:もう一度最初からルールを適用
- C:次のルールとチェーン
- T=MIME-type:MIMEタイプを強制
- NS:内部サブリクエストではない場合のみ使用
- NC:大文字小文字を区別しない
- QSA:クエリストリングを追加
- NE:出力をエスケープしない
- PT:次のハンドラに渡す
- S=num:次のnumルールをスキップ
- E=VAR:VAL:環境変数を設定
5. Discuz 3Xのリダイレクト例
6. Nginxでの設定方法
Nginxでも同様の設定が可能です。`nginx.conf`または対応する`.conf`ファイルに以下を追加します:
設定後はNginxサービスを再起動してください。
最後に、もしリライトルールが機能しない場合、ファイル名が`.htaccess`であることを確認してください。
RewriteEngine On
RewriteBase /
RewriteRule ^home/$ home.php [L]
RewriteRule ^login/$ /auth/login.php [L]
RewriteEngine On
RewriteRule ^([a-z]+)/item-([0-9]+)-([0-9]+)\.html$ $1/item_list.php?category=$1&id=$2&page=$3 [L]
/product.php?product_id=* –> /product*.html
/product.php?product_id=*&page=* –> /product*page*.html
RewriteRule ^product([0-9]+).html$ /product.php?product_id=$1 [PT]
RewriteRule ^product([0-9]+)page([0-9]+).html$ /product.php?product_id=$1&page=$2 [PT]
RewriteEngine On
RewriteBase /
RewriteCond %{QUERY_STRING} ^(.*)$
RewriteRule ^article-(.+)\.html$ forum.php?mode=article&article=$1&%1 [L]
server {
listen 80;
server_name example.com;
location / {
root /var/www/html;
index index.html index.htm;
rewrite ^(.*)product-([0-9]+)-([0-9]+)\.html$ $1/product_list.php?category=$2&page=$3 last;
}
}