mod_rewriteで存在するファイルの設定方法

このQ&Aのポイント
  • mod_rewriteを使用して存在するファイルの設定方法を教えてください。
  • 特定のファイルを別のURLでアクセスできるようにするための設定方法を教えてください。
  • 存在するファイルをURLに表示させる方法について教えてください。
回答を見る
  • ベストアンサー

mod_rewriteで存在するファイルの設定方法

mod_rewriteで質問です。 http://foo.com/test.php というファイルを http://foo.com/test でアクセスできるようにしたいです。 login.phpはディレクトリに存在する状態です。。 レンタルサーバーの仕様なのか、 RewriteRule test /test.php としてもInternal Server Errorになります。 ただ、 RewriteRule aaa /test.php と設定すると、 http://foo.com/aaa でtest.phpにアクセスできることはわかりました。 test.phpが存在する状態だとこれはできないことなのでしょうか?

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

  • ベストアンサー
  • coai
  • ベストアンサー率50% (152/301)
回答No.3

#2でできないという事は、貴殿の推測通りサーバに特殊な設定があるのかも知れない。 たとえば、無限ループ対策に何らかの(一般的ではない)オプションを入れているとか。 そのサーバで使えるかどうか判らないけど、ForceTypeで逃げるという方法もないではない。 test.phpの拡張子[.php]を削除して、testという名前にする。 その状態でもPHPプログラムとして実行されれば、一応やりたい事は実現できているかと。 testという名前に変更して、.htaccess内に以下のように書けば、FilesMatchやForceTypeが使えるなら動くはず。 <FilesMatch "^test$" > ForceType application/x-httpd-php </FilesMatch>

その他の回答 (2)

  • coai
  • ベストアンサー率50% (152/301)
回答No.2

とりあえず、手元の環境で試してみた。 そもそもInternal Server Errorを再現するのに苦労した(という程でもないが) RewriteRule test ./test.php と、後ろをに .(実際には半角)を付けた場合にのみInternal Server Errorが発生。 それ以外の場合には、NotFoundとなってしまう。 質問に書き移す際に間違った? 上記のように.が付いている状態だと仮定して、ちゃんと動くように書き直して見ると… RewriteRule ^test$ ./test.php で、上記のように書けばOKだった。やはり、無限ループ絡みの問題っぽいと思える。 RewriteRule test test.php 後ろから、./を削除した場合もOK。これは再評価しないから無限ループがないんだろう。 サーバー上でだけ発生している問題なら、 RewriteBase / を書けばいいかも知れない。 ttp://hoge.com/~fugafuga/ のような感じで、サブフォルダ形式のURLなら RewriteBase /~fugafuga/ で。

rialrialrial
質問者

補足

全て試しましたが、できないです。 ちなみにレンタルサーバーはさくらのスタンダードです。 おそらくレンタルサーバーの仕様なのだと思っているのですが、 どうにかうまい設定方法を知りたいです。

  • coai
  • ベストアンサー率50% (152/301)
回答No.1

ファイルが存在するからという原因ではなく RewriteRule test /test.php 書き換え前と書き換え後で、testが重複するからではないかという気がする。 test.phpに書き換えた結果、再評価してtestに引っ掛かり、test.phpに書き換えて再評価して再度…と無限ループ。 試してないけど、 RewriteRule test$ /test.php としたら、どうなります?testで終わった場合という条件式に書き換え。 念のために、以下のように始まりと終わりを明示して、testだった場合の方がいいかも。これも試してない。 RewriteRule ^test$ /test.php

rialrialrial
質問者

補足

RewriteRule test$ /test.php RewriteRule ^test$ /test.php でもできませんでした。 カッコをつけたり、他色々試したつもりですができないです。 また、申し訳ないのですが、質問文中の 「login.phpはディレクトリに存在する状態です」 は 「test.phpはディレクトリに存在する状態です」 の記述ミスでした。(coaiさんはそう捉えてくださっていたようですが)

関連するQ&A

  • mod_writeの書き方を教えて下さい。

    mod_writeの書き方を教えて下さい。 http://www.domain.com/aaa/bbb で静的アドレスでアクセスしたいです。 aaaディレクトリにindex.phpを置いています。 しかしやり方がわかりません。できますでしょうか。 RewriteRule ^aaa/(.*)$ /aaa/index.php?id=$1 [L] 上記でinternal serverエラーになります。 http://www.domain.com/aaa/bbb.html のように.htmlを付けたくないのです。 RewriteRule ^aaa/(.*).html$ /aaa/index.php?id=$1 [L] 上だとうまくいきます。 お願いします。本当に困っています。

  • mod_rewriteについて教えてください。

    mod_rewriteについてお願いします。 「a」と「b」というフォルダにそれぞれ「index.html」「test.html」が入っています。「a」と「b」で「index.html」「test.html」の内容はちがいます。 わたしが一番望んでいるのは http://example.com/a/以下にアクセスがあった場合 http://example.com/b/以下にリダイレクトさせるというものです。 例) http://example.com/a/test.htmlにアクセスがあったらhttp://example.com/b/test.htmlにリダイレクト。 ------------------------------------------------------------ Options +FollowSymLinks AddHandler cgi-script htaccess <IfModule mod_rewrite.c> RewriteEngine on RewriteRule ^/a/$ /b/$1 [R=302,L] </IfModule> ------------------------------------------------------------ としてみましたが、リダイレクトされません。 ちなみに RewriteRule ^$ /b/$1 [R=302,L] と書くと、http://example.com/にアクセスがあった場合 http://example.com/b/にリダイレクトされましたので mod_rewriteには対応しております。 ご教授のほど、よろしくお願いいたします。

  • mod_rewriteについて

    mod_rewriteについてしつもんです。 http://aaa.jp/bbb.php?c=100&d=200 ↓ http://aaa.jp/bbb_100.html?d=200 とできるんでしょうか? 設定してみたのですが、以下では機能しませんでした。 RewriteRule ^/bbb([0-9]+)\.html(.*)$ /bbb.php?c=$1$2 よろしくお願いします。

  • 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について

    いつもお世話になっております。 mod_rewriteを使ってURLの書き換えをしたいと思っております。 下記のようなファイルがあるとします。 http://www.domain.com/aaa/list.php http://www.domain.com/aaa/detail.php http://www.domain.com/bbb/list.php http://www.domain.com/bbb/detail.php PHPファイルはHTMLに書き換えています。 ---------------------------------------- RewriteEngine on # QUERY_STRING RewriteRule /([a-z]+)\/([a-z]+)\/([0-9]+)\.html$ /$1/$2.php?$3 [L] RewriteCond %{REQUEST_FILENAME} !-f RewriteCond %{REQUEST_FILENAME} !-d RewriteRule (.*)\.html$ /$1.php [L] ---------------------------------------- http://www.domain.com/aaa/detail/2.html http://www.domain.com/bbb/detail/2.html 上記どちらにアクセスしてもページが表示されませんと なってしまいます。 どうぞ、ご教授お願いいたします。 <環境> PHP:4.3.2 Apache:2.0.40 (Red Hat Linux)

    • ベストアンサー
    • PHP
  • mod_rewrite設定について

    mod_rewrite設定について mod_rewriteでcgiに渡す引数の一部のみを書き換えることは可能でしょうか。 具体的には下記のような挙動を実現したいです。 http://mydomain.com/test.cgi?status=true&action=1 ↓ http://mydomain.com/test.cgi?status=false&action=1 2つ目の引数は複数のパターンが想定されています。 下記のようなrewriteの設定を試してみましたが リダイレクトされませんでした。 ~~~~~~~~~~~~~~~~~~~~~ RewriteEngine on RewriteRule ^/test.cgi?status=true(.*) http://mydomain.com/test.cgi?status=false$1 [QSA] ~~~~~~~~~~~~~~~~~~~~~ 助言をいただけないでしょうか。 よろしくお願い致します。

    • ベストアンサー
    • HTML
  • Apache mod_rewriteが .htaccess ではうまく適用できない

    mod_rewriteで書き換えに挑戦しているのですが、うまく動いてくれません。 やりたいことは、 http://www.example.com/ 以下をすべて http://www.example.com/index.php に書き換えたい。 開発中は直接 httpd.conf を編集できるため RewriteEngine on RewriteRule ^/((?!css|js|img).*)$ /index.php?&%{QUERY_STRING} [L] 上記で問題なく動いているのですが、htaccessではinternal errorかACCESS forbidden, object notfound などでうまく以後来ません。 ためしに、 RewriteRule aaa index.php?&%{QUERY_STRING} [L] として、http://www.example.com/aaa にアクセスしても object notfound が返ってきます。 ^aaa としたり ^aaa$ としたり、いろいろ試してるのですが全滅・・・ 検索して見つかったサンプルなどをそのままコピーしても使えません。 ちなみに、開発環境では Apache2.2.4。 公開用では 1.3系 の予定です。 Apache2.2.4 の httpd.conf ではOK。htaccess ではOUT。 難しい・・・

  • mod_rewriteでアドレスを書き換えたい

    mod_rewriteでアドレスを書き換えたい思っています。 xamppでテストしていますがうまくいきません。 mod_rewrite.soの#は外しています。(つまり、.htaccess以外の設定はできていると思います) 【やりたい事】 localhost/test/index.php?p=test を  ↓ localhost/test/i/test でアクセスしたいです。 【参考にした情報】 http://www.sample.com/cgi-bin/sample/sample.cgi?a=123&b=456 というURLを静的なアドレスでアクセスできるように以下のように設定します。 RewriteEngine on RewriteRule ^/cgi-bin/sample/([0-9A-Za-z]+)/([0-9A-Za-z)]+)\.html$ /cgi-bin/sample/sample.cgi?a=$1&b=$2 [L] を言うのを見つけました。 【試したこと】 .htaccessをつくり RewriteEngine on RewriteRule ^/test/i/([0-9A-Za-z)]+)$ /test/index.php?p=$1 [L] と記入 【結果】 Object not found! 要求された URL は本サーバでは見つかりませんでした。 もし手入力で URL を入力した場合は、綴りを確認して再度お試し下さい。 と表示されました。 ------------------------------------------------------------------ localhost/test/i/testでアクセスするには、.htaccessをどう書けばいいのでしょうか? 疑問1.xamppでlocalhostでmod_rewriteができるのだろうか? 疑問2.参考にした情報のRewriteRuleの"^"がわからない。正規表現の"^"とは文頭にマッチすると思います。この場合の文頭とは? よろしくお願いします。

  • mod_rewriteについて

    mod_rewriteの質問です。 RewriteEngine on RewriteCond %{TIME_DAY}.html -s RewriteRule index.html test.php RewriteRule index.html %{TIME_DAY}.html と記述しているのですが、 %{TIME_DAY}.html が存在するのに、 RewriteCond部分でないと判定され、 %{TIME_DAY}.html が読まれてしまいます。 RewriteCond部分の条件部分の記述方法が間違っているのでしょうか?

  • mod_rewriteで

    mod_rewriteで /dir/aaa/bbb/form.html  を  /dir/form.php?id1=aaa&id2=bbb にする書き方を教えてください いまのところ RewriteRule ^/dir/([0-9A-Za-z]+)/([0-9A-Za-z]+)/form.html /dir/form.php?id1=$1&id2=$2 [L] としていますが上手く出来ていないようです

専門家に質問してみよう