2924


## 【やりたいこと】

特定のURLへのアクセスを決まったファイルへリダイレクトする

例：

sunday.local/app/get/1へアクセスがあったとして

sunday.local/dispatch.phpへリダイレクトする。

dispatch.phpの中でapp/get/1を解析して内部の形式で呼び出す（ディスパッチ）ようにしたいのですがリダイレクトが想定した動作をしません。

## 【環境】

  * OS：Ubuntu14.04 
  * Apache:2.4.7

## 【手順】

  1. VirtualHostの設定 /etc/apache2/sites-available/sunday.local.confを作成

**AllowOverride All** で.htaccessの利用を許可しています。

[code]

        <VirsualHost *:80>
        ServerName sunday.local
        ServerAdmin webmaster@virtual.host
        DocumentRoot /home/oono/bear/public
        ErrorLog /var/log/apache2/virtual.host.error.log
        CustomLog /var/log/apache2/virtual.host.access.log combined
        LogLevel warn
        <Directory "/home/oono/bear/public">
            Require all granted
            AllowOverride All
        </Directory>
    
    
[/code]

  2. VirtualHostの有効化

有効にするために以下のコマンドを実行

[code]

        $ sudo a2ensite sunday.local
        $ sudo service apache2 reload
    
[/code]

  3. /etc/hostsに追記

以下を追記しました。

[code]

        127.0.1.1   sunday.local
    
[/code]

/home/oono/bear/public/test.htmlを配置

ブラウザからhttp://sunday.local/test.htmlにアクセスして表示されることを確認

  4. mod_rewriteを有効化

Apacehのモジュールrewriteを有効にする

[code]

        $ sudo a2enmod rewrite
        $ sudo service apache2 restart
    
[/code]

  5. .htaccessを作成

sunday.localのドキュメントルート「/home/oono/bear/public」に.htaccessを作成
<http://weblabo.oscasierra.net/apache-rewrite-1>/を参考に

[code]

        RewriteEngine on
        RewriteRule ^/$ http://www.google.co.jp [R=302,L]
    
[/code]

  6. ブラウザからアクセス

まずはテストなので分かりやすく「sunday.local/」にアクセスしたら「www.google.co.jp」にリダイレクトされることを期待してるのですが、403
Forbiddenの画面になります。

何か設定が不足、間違っているのでしょうか？


CC BY-SA 3.0
2015-01-01T15:30:38.230
2918
2015-01-01T18:46:47.540
2015-01-01T15:47:51.217
3639
5960
question
php apache
mod_rewriteを使ったリダイレクト


.htaccessによってrewriteを使用する場合、設置したパスからの相対パスが入力されます。

[code]

    http://sunday.local   =>  ""
    http://sunday.local/  =>  ""　　【注：最初の / は含まれません。】
    http://sunday.local/test.html  =>  "test.html"
    
[/code]

そのため、RewriteRuleの正規表現 ^/$ にはマッチせず、想定した動作になりません。  
引数なしの場合は ^$ を、引数ありの場合は ^(.*)$ のような記述となります。

たとえば、次のような.htaccessを試してみてください。

[code]

    RewriteEngine on
    RewriteRule ^$ http://www.google.co.jp/ [R=302,L]
    RewriteRule ^(.*)$ http://www.google.co.jp/#q=$1 [R=302,L,NE]
    
[/code]


CC BY-SA 3.0
2015-01-01T18:46:47.540
2924
2015-01-01T18:46:47.540
5972
2918
answer