スポンサードリンク

【mod_rewrite】「httpd.conf」での設定方法

ApacheのモジュールであるURL書き換えエンジン mod_rewriteは、「httpd.conf」または「.htaccess」で設定できます。

ここでは、「httpd.conf」での設定方法を紹介します。

スポンサードリンク

mod_rewriteが使用可能か確認

まず、mod_rewriteが許可されているか確認します。

[○○○@vweb2 ~]# vi /etc/httpd/conf/httpd.conf

上のコマンドを実行して以下の記述がある、かつコメントアウトされていないか確認してください。

LoadModule rewrite_module modules/mod_rewrite.so

先頭に「#」があればコメントアウトされていますので、それを削除します。ない場合は追加します(mod_rewriteをインストールしていない場合はインストールする)。

修正した場合は、以下のようにhttpdを再起動します。

[○○○@vweb2 ~]# /etc/rc.d/init.d/httpd restart

httpd.confの編集

環境・条件

環境・条件を整理しておきます。

  • 「○○○.com」を以下のようにバーチャルホストしている
    <VirtualHost *:80>
    DocumentRoot /var/www/html/○○○
    ServerName ○○○.com
    ServerAlias www.○○○.com
    <Directory "/var/www/html/○○○">
    AllowOverride All
    </Directory>
    </VirtualHost>

このとき、「http://○○○.com/abc/index.html」でアクセスがあった場合、「http://○○○.com/abc/index2.html」にリダイレクトさせたいと思います。

編集

バーチャルホストの設定を「httpd.conf」に記述している場合は①、「vhost.conf」に記述している場合は②のコマンドを実行します。

[○○○@vweb2 ~]# vi /etc/httpd/conf/httpd.conf ・・・①

[○○○@vweb2 ~]# vi /etc/httpd/conf.d/vhost.conf ・・・②

編集モードにして、次のように記述を追加します。

<VirtualHost *:80>
DocumentRoot /var/www/html/○○○
ServerName ○○○.com
ServerAlias www.○○○.com
RewriteEngine On
RewriteRule ^/abc/index\.html$ /abc/index2.html [R,L]
<Directory "/var/www/html/○○○">
AllowOverride All
</Directory>
</VirtualHost>

そしてhttpdを再起動します。

[○○○@vweb2 ~]# /etc/rc.d/init.d/httpd restart

これで、「http://○○○.com/abc/index.html」のアクセスがあった場合、「http://○○○.com/abc/index2.html」にリダイレクトされます。

挙動

簡単に挙動を書くと、「http://○○○.com/abc/index.html」でアクセスがあった場合、RewriteRuleには「/abc/index.html」が渡ります(「/」が先頭につく、この詳細は「.htaccess」と「httpd.conf」での設定による違いを参照)。

そしてパターンマッチが成功し、「/abc/index2.html」にURLが書き換えられ、リダイレクトされます。

RewriteBaseを記述する場合の注意点

RewriteBaseを使用する場合、次のように記述し

<VirtualHost *:80>
DocumentRoot /var/www/html/○○○
ServerName ○○○.com
ServerAlias www.○○○.com
RewriteEngine On
RewriteBase /abc
RewriteRule ^/abc/index\.html$ index2.html [R,L]
<Directory "/var/www/html/○○○">
AllowOverride All
</Directory>
</VirtualHost>

httpdを再起動させようとすると、次のようなエラーがでて再起動ができません。

Starting httpd: Syntax error on line 1013 of /etc/httpd/conf/httpd.conf:
RewriteBase: only valid in per-directory config files

これは、エラーにあるようにRewriteBaseは「ディレクトリ毎の設定ファイルでのみ有効」となります。

すなわち次のように、Directoryセクションにmod_rewriteを記述しなければなりません。

<VirtualHost *:80>
DocumentRoot /var/www/html/○○○
ServerName ○○○.com
ServerAlias www.○○○.com
<Directory "/var/www/html/○○○">
AllowOverride All
RewriteEngine On
RewriteBase /abc
RewriteRule ^abc/index\.html$ index2.html [R,L]
</Directory>
</VirtualHost>

なお、この場合、Directoryセクションにmod_rewriteを記述しているので、RewriteRuleにわたってくるURLは「/abc/index.html」ではなく、「abc/index.html」となります(先頭に「/」は付かない)。

コメント

まだコメントはありません。

コメントフォーム
お名前
コメント