「Apache mod rewriteメモ」の版間の差分
ページの作成:「= Apache mod_rewriteメモ =」 |
|||
1行目: | 1行目: | ||
= | == RewriteBaseとは == | ||
=== 書式 === | |||
RewriteBase URL上のディレクトリパス | |||
=== 説明 === | |||
- DocumentRoot | |||
``` | |||
/var/www/site/ | |||
``` | |||
- htmlの配置 | |||
``` | |||
/var/www/site/abc/hoge.html | |||
/var/www/site/abc/piyo.html | |||
``` | |||
- ルール | |||
``` | |||
RewriteEngine On | |||
RewriteBase /abc | |||
RewriteRule ^abc/hoge\.html piyo.html [L] | |||
``` | |||
- 例: URLを`http://server/abc/hoge.html`と指定した場合、表示されているURLはそのままで、`${DOCUMENT_ROOT}${REWRITE_BASE}/piyo.html`の内容が表示される。 | |||
## RewriteRuleとは | |||
### 書式 | |||
``` | |||
RewriteRule 置換前のパターン 置換後の文字列 | |||
``` | |||
- 置換前のパターン:リクエストされたURLとは限らず、書き換えされてきたURLも指す。 | |||
### 説明 | |||
- DocumentRoot | |||
``` | |||
/var/www/site/ | |||
``` | |||
- htmlの配置 | |||
``` | |||
/var/www/site/hoge.html | |||
/var/www/site/piyo.html | |||
``` | |||
- ルール | |||
``` | |||
RewriteEngine On | |||
RewriteRule ^/?hoge\.html$ piyo.html [L] | |||
``` | |||
`^/?hoge\.html$`:渡ってきたURL(正規表現)を`piyo.html`で置換。`[L]`は個々で書き換えを終了するという意味。 | |||
- URLが`hoge.html`と渡ってくるか、`/hoge.html`と渡ってくるかの違い | |||
- `VirtualHost`ディレクティブの場合は、URLのパスが対象となり、先頭に`/`が付く | |||
- `Directory`ディレクティブや`.htaccess`の場合は、そのディレクトリからの相対パスが対象となり、先頭に`/`が付かない。 | |||
`(.*)`パターンをグループ化 | |||
``` | |||
RewriteEngine On | |||
RewriteRule (.*) http://server/$1 [R] | |||
``` | |||
- `(.*)`を変数`$1`で展開 | |||
``` | |||
http://server1/hoge.html -> http://server/hoge.html | |||
``` | |||
``` | |||
RewriteEngine ON | |||
RewriteRule ^/旧ディレクトリ/(.*) /新ディレクトリ/$1 | |||
``` | |||
``` | |||
RewriteEngine On | |||
RewriteRule ^(/somedir/.*) http://newserver/$1 [R] | |||
``` | |||
## RwriteRuleのフラグ | |||
^フラグ ^意味 ^説明 ^ | |||
|C |Chain |このルールにマッチしたら、次のルールを評価 | | |||
|F |Forbidden |アクセス禁止(403-Forbidden)。[L]フラグと同様、以降のルールは無視。 | | |||
|G |Gone |削除(410-GOne) | | |||
|L |Last |マッチしたらRewriteを辞めます。以降のルールは無視。 | | |||
|NC |No Case |大文字小文字を無視 | | |||
|NE |No Escape |"."、"?"、"%"などの特殊文字が"%25"のようにエンコードされるのを防ぐ | | |||
|OR |Or |RewriteCondを複数指定する場合のOr指定。指定なしならAND | | |||
|PT |Path Through |Rewriteを終了し、それ以外の処理に移行 | | |||
|R |Redirect |指定したURLにリダイレクト。[R=303]のようにリダイレクトコードも付加できる。[L]同様、以降のルールは無視。 | |
2018年3月19日 (月) 22:45時点における版
RewriteBaseとは
書式
RewriteBase URL上のディレクトリパス
説明
- DocumentRoot
``` /var/www/site/ ```
- htmlの配置
``` /var/www/site/abc/hoge.html /var/www/site/abc/piyo.html ```
- ルール
``` RewriteEngine On RewriteBase /abc RewriteRule ^abc/hoge\.html piyo.html [L] ```
- RewriteRuleとは
- 書式
``` RewriteRule 置換前のパターン 置換後の文字列 ```
- 置換前のパターン:リクエストされたURLとは限らず、書き換えされてきたURLも指す。
- 説明
- DocumentRoot
``` /var/www/site/ ```
- htmlの配置
``` /var/www/site/hoge.html /var/www/site/piyo.html ```
- ルール
``` RewriteEngine On RewriteRule ^/?hoge\.html$ piyo.html [L] ```
`^/?hoge\.html$`:渡ってきたURL(正規表現)を`piyo.html`で置換。`[L]`は個々で書き換えを終了するという意味。
- URLが`hoge.html`と渡ってくるか、`/hoge.html`と渡ってくるかの違い
- `VirtualHost`ディレクティブの場合は、URLのパスが対象となり、先頭に`/`が付く - `Directory`ディレクティブや`.htaccess`の場合は、そのディレクトリからの相対パスが対象となり、先頭に`/`が付かない。
`(.*)`パターンをグループ化
``` RewriteEngine On RewriteRule (.*) http://server/$1 [R] ```
- `(.*)`を変数`$1`で展開
``` http://server1/hoge.html -> http://server/hoge.html ```
``` RewriteEngine ON RewriteRule ^/旧ディレクトリ/(.*) /新ディレクトリ/$1 ```
``` RewriteEngine On RewriteRule ^(/somedir/.*) http://newserver/$1 [R] ```
- RwriteRuleのフラグ
^フラグ ^意味 ^説明 ^ |C |Chain |このルールにマッチしたら、次のルールを評価 | |F |Forbidden |アクセス禁止(403-Forbidden)。[L]フラグと同様、以降のルールは無視。 | |G |Gone |削除(410-GOne) | |L |Last |マッチしたらRewriteを辞めます。以降のルールは無視。 | |NC |No Case |大文字小文字を無視 | |NE |No Escape |"."、"?"、"%"などの特殊文字が"%25"のようにエンコードされるのを防ぐ | |OR |Or |RewriteCondを複数指定する場合のOr指定。指定なしならAND | |PT |Path Through |Rewriteを終了し、それ以外の処理に移行 | |R |Redirect |指定したURLにリダイレクト。[R=303]のようにリダイレクトコードも付加できる。[L]同様、以降のルールは無視。 |