【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」となります(先頭に「/」は付かない)。
Warning: count(): Parameter must be an array or an object that implements Countable in /home/yskymk/www/000web/ysklog/mod-rewrite/wp-includes/class-wp-comment-query.php on line 405
コメント
まだコメントはありません。