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

提供:雑廉堂Wiki
24行目: 24行目:
  RewriteBase /abc
  RewriteBase /abc
  RewriteRule ^abc/hoge\.html piyo.html [L]
  RewriteRule ^abc/hoge\.html piyo.html [L]
```


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


## RewriteRuleとは
== RewriteRuleとは ==


### 書式
=== 書式 ===


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


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


### 説明
=== 説明 ===


- DocumentRoot
* DocumentRoot


```
/var/www/site/
/var/www/site/
```


- htmlの配置
* htmlの配置


```
/var/www/site/hoge.html
/var/www/site/hoge.html
/var/www/site/piyo.html
/var/www/site/piyo.html
```


- ルール
* ルール


```
RewriteEngine On
RewriteEngine On
RewriteRule ^/?hoge\.html$ piyo.html [L]
RewriteRule ^/?hoge\.html$ piyo.html [L]
```


`^/?hoge\.html$`:渡ってきたURL(正規表現)を`piyo.html`で置換。`[L]`は個々で書き換えを終了するという意味。
<code>^/?hoge\.html$</code>:渡ってきたURL(正規表現)を<code>piyo.html</code>で置換。<code>[L]</code>はここで書き換えを終了するという意味。


- URLが`hoge.html`と渡ってくるか、`/hoge.html`と渡ってくるかの違い
* URLが<code>hoge.html</code>と渡ってくるか、<code>/hoge.html</code>と渡ってくるかの違い
  - `VirtualHost`ディレクティブの場合は、URLのパスが対象となり、先頭に`/`が付く
** <code><VirtualHost></code>ディレクティブの場合は、URLのパスが対象となり、先頭に<code>/</code>が付く
  - `Directory`ディレクティブや`.htaccess`の場合は、そのディレクトリからの相対パスが対象となり、先頭に`/`が付かない。
** `Directory`ディレクティブや`.htaccess`の場合は、そのディレクトリからの相対パスが対象となり、先頭に`/`が付かない。


`(.*)`パターンをグループ化
`(.*)`パターンをグループ化

2018年3月19日 (月) 22:58時点における版

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


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