mod_rewriteのRewriteMapの使い方についての質問

このQ&Aのポイント
  • mod_rewriteのRewriteMapのファイルの場所やパーミッションについて教えてください。
  • Apacheを再起動した際に発生するエラーについて解決方法を教えてください。
  • mod_rewriteのRewriteMapの使い方について詳しく教えてください。
回答を見る
  • ベストアンサー

mod_rewriteのRewriteMapについて

初めて質問させていただきます。 mod_rewriteのRewriteMapの使い方について質問があります。 /etc/httpd/conf/httpd.conf に以下のように書きました。 <IfModule mod_rewrite.c> RewriteEngine on RewriteLog /etc/httpd/logs/rewrite_log RewriteLogLevel 2 RewriteMap userMap txt:/home/userMap/userMap.txt </IfModule> この状態で、Apache2を再起動すると、Apacheが起動する際に以下のエラーが出て起動できません。 -- httpd を起動中: Syntax error on line 1036 of /etc/httpd/conf/httpd.conf: RewriteMap: file for map userMap not found:/home/userMap/userMap.txt -- エラーメッセージは指定されたファイルがないと言うことだと思うのですが、指定した位置には確かにファイルがあることを確認しています。 ファイルの所有権や上位ディレクトリのパーミッションの関係なのかなと思って、いろいろ変えて試しているのですが、一向にうまくいきません。 RewriteMapのファイルを置く位置はどこがベストなのかとか、パーミッションや所有権などで気をつけるべきポイントなどを教えていただけると助かります。 よろしくお願いいたします。

質問者が選んだベストアンサー

  • ベストアンサー
  • php504
  • ベストアンサー率42% (926/2160)
回答No.1

普通に一般ユーザのホームディレクトリにuserMap.txtを作成して(パーミッションは644)上記記述を追加してApache2をrestartしてみましたが特にエラー無く起動できました。

catalase
質問者

お礼

情報どうもありがとうございます。 その後いろいろ試してみた結果、CentOS 4でデフォルトで有効になっているSE Linuxという機能を無効にすることで、Apacheの起動が問題なく行えるようになりました。

関連するQ&A

  • mod_rewriteについて

    初めて質問させていただきます。 よろしくお願いします。 Solaris8にてApacheを動かしています。 【問題】「HTTP TRACE」を拒否するためにmod_rewriteモジュールをインストールしようと思うのですがうまくいきません。 【詳細】mod_rewriteをインストールするとmod_soが消えてしまい、mod_soを入れなおすとmod_rewriteが消えてしまいます。  ./configure --enable-module=so --enable-module=rewrite とすると両方が入るみたいなんですが、 /usr/local/apache/bin/apachectl startssl としても、  Syntax error on line 206 of /usr/local/apache/conf/httpd.conf: Cannot load /usr/local/apache/libexec/libssl.so into server: ld.so.1: /usr/local/apache/bin/httpd: 重大なエラー: 再配置エラー: ファイル /usr/local/apache/libexec/libssl.so: シンボル ap_global_ctx: 参照シンボルが見つかりません。 /usr/local/apache/bin/apachectl startssl: httpd could not be started と、こんなエラーが出てhttpdがスタートできません。 どこに原因があるためのエラーなのでしょうか??

  • httpsでmod_rewriteができない

    はじめまして。 Linux環境で、apacheのhttp.confにmod_rewriteを記載し、httpsとhttpを切り替えたいと思っています。 httpd.confに以下のように記述しています。 <IfModule mod_rewrite.c> RewriteEngine on  #(1)httpで/aaaa/bbbbにアクセスされたときにhttps://~に変えたい RewriteCond %{REQUEST_URI} ^/aaaa/bbbb RewriteCond %{HTTPS} off RewriteRule ^(.*)$ https://%{HTTP_HOST}%{REQUEST_URI} [R]  #(2)httpsで/cccc/ddddにアクセスされたときにhttp://~に変えたい RewriteCond %{REQUEST_URI} ^/cccc/dddd RewriteCond %{HTTPS} on RewriteRule ^(.*)$ https://%{HTTP_HOST}%{REQUEST_URI} [R] </IfModule> 上記(1)のhttpでのアクセス時には、mod_rewriteが効いてhttpsへ切り替えられるのですが、 上記(2)のhttpsでのアクセス時には、mod_rewriteが効いていないようでhttpへ切り替えられません。 rewriteログを見てみると、当サイトへhttpでアクセスした場合にはログが出力されますが、 httpsでアクセスした場合には出力されません。 そもそもhttpsでのアクセスの場合にhttpd.confのmod_rewriteが効いていないようです。 ですが、これに対しどこを調査すべきかが分かっていません。 SSLの設定自体は出来ていると思っていて、 https://xxxx.jpのようにアクセスするとちゃんとページが表示されます。 どの当たりに問題がありそうでしょうか? 解析のヒントを頂けたらと思います。 宜しくお願い致します。

  • mod_rewriteが効かない!

    サーバの運用上、mod_rewriteを使う必要が出来たので設定してみたのですが効きません。 FreeBSD4.11+Apache1.3.33で httpd.confファイルに直接書き込んで試しています。 LoadModule rewrite_module modules/mod_rewrite.so AddModule mod_rewrite.c のどちらも書いてあるにもかかわらず、下記のテスト設定を試してみたらローカルIPからアクセス出来てしまいます。 RewriteEngine on RewriteCond %{REMOTE_ADDR} ^192\.168\.1\. ←ローカルネットワークのアドレス RewriteRule ^.*$ - [F] どのようにしたらいいですか? アドバイスお願い致します。

  • mod_rewriteを使えるようにするには?

    LinuxのOS Fedora Core4でサーバを立てています。 .htaccessでmod_rewriteを使用したいのですが、デフォルトでのApach2.054インストールでは使用できないようです。 使用するにはhttpd.confファイルの中に LoadModule rewrite_module modules/mod_rewrite.so と AddModule mod_rewrite.c の行が必要だそうですが、 AddModule mod_rewrite.cの行が見当たりません。 どうやってインストールできるでしょうか?

  • Apacheのmod_rewriteでURLの書き換え

    Apacheのmod_rewriteでURLを書き換えたいと思います。 ルートデイレクトリは"C:/Program Files/Apache Group/Apache2/htdocs"です。   そして、http://localhost/sample/ と打ったときに、"C:/Program Files/Apache Group/Apache2/htdocs/sample"ではなく、"C:/tmp/test"にアクセスされるようにするには、httpd.confにどのような設定を追加すればよいのでしょうか? Apache 2.0.63 Windows Vista

  • mod_rewriteの環境変数を埋め込みたい

    お世話になります。 現在、以下の環境でWebアプリケーションを開発しています。 CentOS5.4 Apache2.2.3 Tomcat7 JavaSE6 ApacheとTomcatの連携にmod_proxy_ajpモジュールを使用しています。 ただ、クライアントからアクセスするURLと連携先のURLが異なるため、Java側でHttpRequestからコンテキストパス以降を取得するとajp連携されたパスしか取得できず、クライアントがアクセスしたURI情報が取得できません。 これを対策するために、Apacheモジュールのmod_rewriteとmod_headersを利用して、 クライアントがアクセスしたURIをリクエストヘッダに埋め込もうとしています。 以下httpd.confに追加した設定です。 (rewrite.confも試しました) RewriteEngine On RewriteRule .* - [E=ORG_QUERY_STRING:%{QUERY_STRING}] RequestHeader append "test_query_string" %{ORG_QUERY_STRING}e 設定後、Apacheを再起動してWebアプリケーションにアクセスすると、リクエストヘッダ自体は追加されているのですが値が(null)となってしまい取得できません。 mod_rewriteの環境変数が取得できていないのかと思い、 RewriteRule .* - [E=ORG_QUERY_STRING:TEST] と固定文字列を埋め込んでも取得できませんでした。 このことからENVによる環境変数への設定、または参照が出来ていないのかと思われますが、どうにも解決できません。 参照時に RequestHeader append "test_query_string" %{ENV:ORG_QUERY_STRING}e としても同様の結果でした。 心当たりのある方、またはデバッグ方法や別解などアドバイスを頂けないでしょうか? なお、httpd.confではmod_rewrite、mod_headersのモジュール定義は有効となっております。 また、環境変数のスペルミスもコピペして確認しております。

  • https→httpsのrewriteが出来ない

    https→httpsのrewriteが上手くいきません。 追加ドメイン取得前より、http→httpsのrewriteの設定をして利用していました。 今回、追加ドメイン(これを正式なURLとしたい)を取得したことにより、1つのファイルへ複数のドメインでアクセス出来る状況になってしまいました。  さくらのVPS   仮)IPアドレス   49.39.29.19     初期ドメイン  www1111aa.sakura.ne.jp  さくらのドメイン   仮)追加ドメイン  www.bbbb.com  ※CentOS httpd.confの2つのファイルを書きなおし、以下のrewriteは成功しました。  http://49.39.29.19 → https://www.bbbb.com  http://www1111aa.sakura.ne.jp→ https://www.bbbb.com  http://bbbb.com → https://www.bbbb.com しかしhttps→httpsの設定が上手くいかず、以下についてはそのままのアドレスとなってしまいます。  https://49.39.29.19  https://www1111aa.sakura.ne.jp  https://bbbb.com 上記の場合でもhttps://www.bbbb.comへ飛ぶように設定したいのですが、どのようにしたらよいかご教授ください。 ちなみに。私が既にhttpd.confに書いてダメだったものは以下です。 (1) <VirtualHost 49.39.29.19:443 > ServerName www.bbbb.com Redirect / https://www.bbbb.com </VirtualHost> (2) <IfModule mod_rewrite.c> RewriteEngine on ・・・ RewriteCond %{SERVER_PORT} ==443$ RewriteRule ^/(.*)?$ https://www.bbbb.com/$1 [L,R] </IfModule> ※ ^443$ともしてみましたがダメでした。 (3) <VirtualHost 49.39.29.19:443 > RewriteEngine On RewriteCond %{HTTP_HOST} ^bbbb\.com RewriteCond %{HTTP_HOST} ^www1111aa\.sakura\.ne\.jp RewriteCond %{HTTP_HOST} ^49\.39\.29\.19 RewriteRule /(.*) https://www.bbbb.com/$1 [R=301,L] </VirtualHost> ※VirtualHost以下を<IfModule mod_rewrite.c>で囲んだり、VirtualHostを<IfModule mod_rewrite.c>に変えたりしてみてもダメでした。 (4) Listen 80 Listen 443  と443を追記してみると、アパッチが再起動しなくなりました。エラー内容は以下です。 <エラー内容> NameVirtualHost *:80 has no VirtualHosts (98)Address already in use: make_sock: could not bind to address [::]:443 (98)Address already in use: make_sock: could not bind to address 0.0.0.0:443 no listening sockets available, shutting down Unable to open logs 仕事で急遽サーバー構築をしなければならなくなり勉強をしているもので、素人ですので分かりやすい言葉で説明していただけると助かります。 よろしくお願いします。

  • mod_rewriteが一部だけ効きません。

    mod_rewriteが一部だけ効きません。 CORESERVERからKAGOYAサーバーにサイトを移したのですが、 mod_rewriteが一部効きません。 運営側に尋ねても問題ないとしか回答が返ってきませんでしたので、困っています。 ----------------------------------------------------------------------------- 【.htaccessの記述】 php_flag magic_quotes_gpc off RewriteEngine On (1)RewriteRule ^exp/txt/([0-9]+)/$ exp/index.php?nov=$1&p=0 [L] (2)RewriteRule ^exp/all/$ exp/index.php?list=all [L] ----------------------------------------------------------------------------- 上手くいかないのは(1)の記述です。 「ドメイン名/exp/txt/001/」に繋いだら、 「exp」ディレクトリのindex.phpに([0-9]+)の値を$_GET['nov']に渡す。 という処理にしたいのですが、実際に繋いでみると、 下記エラーがサーバーに出力されました。 ****************************************************************************** File does not exist: /home/○○○○/public_html/ドメイン名/exp/txt/001.txt/ ****************************************************************************** CORESERVERでは正常に動作していたのに、なぜKAGOYAの方では 「~/exp/txt/001.txt/」となるのかが分かりません。 (実際に、txtディレクトリには001.txtというファイルは存在しています) しかし、(2)のmod_rewriteは正常に動作します。 「ドメイン名/exp/all/」に繋いだら、 「exp」ディレクトリのindex.phpにallという値を$_GET['list']に渡す。 どなたかお知恵を貸してください。

  • mod_rewriteを使用するための設定について

    お世話になります。 mod_rewriteの設定についてアドバイスいただきたいと思います。 今までレンタルサーバーで.htaccessを使って、動的URLを静的URLでアクセスさせることに用いていたのですが、自前サーバー(FedraCore2.0+Apache2.0.53)にその.htaccessファイルを移してみたところ、思ったような動作をしてくれません。色々なサイトを参考に見て回ったところ、「httpd.conf」が怪しいと感じたのですが、 LoadModule rewrite_module modules/mod_rewrite.so LoadModule proxy_module modules/mod_proxy.so の箇所もコメントアウトされておりますし、過去ログにもあったバーチャルホストの併用もしておりません。 ちなみに.htaccessは下記のような内容です。 DirectoryIndex index.htm index.php .ht RewriteEngine on RewriteCond %{REQUEST_FILENAME} !-f RewriteCond %{REQUEST_FILENAME} !-d RewriteRule ^doc-([0-9]+).htm+ doc.php?number=$1 レンタルサーバーでは問題なく動作しておりましたので、.htaccess側の問題ではなくApache側の問題だと思っております。どなたかアドバイスの程よろしくお願いいたします。

  • apache2+mod_ssl-apache2+OpenSSL

    apache2+mod_ssl-apache2+OpenSSLで、 /etc/apache2/conf/httpd.confに <IfModule mod_ssl.c> /ect/apache2/conf.d/ssl.conf </IfModule> を追記、 /ect/apache2/conf.d/ssl.confは <VirtualHost 192.168.1.21:443>などを環境に合った設定にしました。 そしてapache2を再起動したのですが、以下のようになりました。 [root@localhost root]# /etc/init.d/apache2 restart httpdを停止中: [失敗] httpdを起動中: [Wed Sep 07 20:39:37 2005] [warn] module ssl_module is already loaded, skipping [Wed Sep 07 20:39:37 2005] [error] (EAI 2)Name or service not known: Failed to resolve server name for 192.168.1.21 (check DNS) -- or specify an explicit ServerName [Wed Sep 07 20:39:37 2005] [warn] VirtualHost 192.168.1.21:443 overlaps with VirtualHost 192.168.1.21:443, the first has precedence, perhaps you need a NameVirtualHost directive [Wed Sep 07 20:39:37 2005] [error] (EAI 2)Name or service not known: Failed to resolve server name for 192.168.1.21 (check DNS) -- or specify an explicit ServerName (98)Address already in use: make_sock: could not bind to address 0.0.0.0:443 no listening sockets available, shutting downUnable to open logs [失敗] /ect/apache2/conf.d/ssl.confを0バイトにすると、apache2は起動できました。 どの設定が悪いか分かる方いらっしゃいませんか?