Apacheのリライトルールの解説

Apacheのリライトルールについて、実例を用いて解説します。 1. 基本的なリダイレクトルール

RewriteEngine On
RewriteBase /
RewriteRule ^home/$ home.php [L]
RewriteRule ^login/$ /auth/login.php [L]
上記の例では、`home/`にアクセスすると`home.php`に、`login/`にアクセスすると`/auth/login.php`にリダイレクトされます。 2. より複雑なリダイレクト

RewriteEngine On
RewriteRule ^([a-z]+)/item-([0-9]+)-([0-9]+)\.html$ $1/item_list.php?category=$1&id=$2&page=$3 [L]
この例では正規表現を使用し、`item-数字-数字.html`形式のURLが`item_list.php`に変換されます。 `$1`, `$2`, `$3`はそれぞれ正規表現内の括弧で指定された部分に対応しています。 3. 精度の高いリダイレクト

/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]
ここでの重点は`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のリダイレクト例

RewriteEngine On
RewriteBase /
RewriteCond %{QUERY_STRING} ^(.*)$
RewriteRule ^article-(.+)\.html$ forum.php?mode=article&article=$1&%1 [L]
6. Nginxでの設定方法 Nginxでも同様の設定が可能です。`nginx.conf`または対応する`.conf`ファイルに以下を追加します:

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;
    }
}
設定後はNginxサービスを再起動してください。 最後に、もしリライトルールが機能しない場合、ファイル名が`.htaccess`であることを確認してください。

タグ: Apache rewrite nginx

7月29日 05:50 投稿