「Apache mod rewriteメモ」の版間の差分

提供:雑廉堂Wiki
ページの作成:「= Apache mod_rewriteメモ =」
 
1行目: 1行目:
= Apache mod_rewriteメモ =
== 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] ```

- 例: URLを`http://server/abc/hoge.html`と指定した場合、表示されているURLはそのままで、`${DOCUMENT_ROOT}${REWRITE_BASE}/piyo.html`の内容が表示される。

    1. RewriteRuleとは
      1. 書式

``` RewriteRule 置換前のパターン 置換後の文字列 ```

- 置換前のパターン:リクエストされたURLとは限らず、書き換えされてきたURLも指す。

      1. 説明

- 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] ```


    1. 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]同様、以降のルールは無視。 |