.htaccessのrewriteの書き方について

このQ&Aのポイント
  • 現在自分のホームページに自作のフォームを設置しています。.htaccessのrewriteを使い、アドレスバーcont1.phpと入力したときcont.htmlのページが表示されるようにしたいと思っています。
  • アドレスバーに直接cont1.phpを入力すると、ダイレクトでそのページが表示、送信されてしまいますので、.htaccessのrewriteを使い、アドレスバーcont1.phpと入力したときcont.htmlのページが表示されるようにしたいと思っています。
  • どなたか、書き方をご教授頂けないでしょうか?
回答を見る
  • ベストアンサー

.htaccessのrewriteの書き方について

現在自分のホームページに自作のフォームを設置しています。 流れとしましては、cont.htmlのページで質問を入力してもらい、cont1.phpのページで 質問内容を確認、送信してもらっています。 アドレスバーに直接cont1.phpを入力すると、ダイレクトでそのページが表示、送信されてしまいますので、.htaccessのrewriteを使い、アドレスバーcont1.phpと入力したときcont.htmlのページが表示されるようにしたいと思っています。 いろいろなサイトでrewriteの書き方を調べてみましたが、どうしても出来ません。 サーバーはApache1.3です。 どなたか、書き方をご教授頂けないでしょうか?。 宜しくお願い致します。

  • PHP
  • 回答数2
  • ありがとう数1

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

  • ベストアンサー
回答No.2

こんばんは。 cont.htmlからcont1.phpへのsubmit時に、何か渡しては? cont1.phpで、これがなければ不正アクセスとして、 header("Location: /cont.html"); とか。

inaj009
質問者

お礼

ありがとうございました。 いろいろ試してみたのですが、思うように行かなかったので、結局あきらめ自分のサイトからしか入れないようにhtaccessで設定出来ました。 この度はありがとうございました。

その他の回答 (1)

  • ma-tsu
  • ベストアンサー率32% (190/593)
回答No.1

rewriteでcont1.phpにアクセスした時にcont.htmlを表示させる様にしてしまったらcont.htmlからフォーム送信された時にcont1.phpが動かないと思うんですが。 それよりcont1.php側で直接アクセスされたらcont.htmlにリダイレクトする様にした方がいいと思いますよ。

inaj009
質問者

補足

ご回答ありがとうございます。 なるほど、リダイレクトの方がいいのですね。リダイレクトも一緒にいろいろ調べてみましたが、よくわかりませんでした。どのように書けば良いのでしょうか?。

関連するQ&A

  • CakePHPの .htaccess設定について

    CakePHPをVPSで構築したサーバー(Linux)にインストールしました。 .htaccess(mod_rewrite)の設定がうまくいっていないようなので対処の方法を教えてください。 [環境] PHP 5.3.3 Apache 2.3.3 CakePHP 1.3.15 mod_rewriteが動いてるのはチェック用のプログラムで確認しました。 controllerとViewファイルを作り、文字の表示は成功しています。 フォームの実験を行った時にフォーム送信後のURL表示がうまくいっていません。(get/post共に) [書籍を参考にしたプログラム] Sampleコントローラーを作り、Viewの中にSampleディレクトリを作りその中にindex.ctpファイルを設置。フォームにテキストを入力して送信ボタンを押すと、テキストが表示されるプログラムです。 [コントローラー]sample_controller.php class HelloController extends AppController { public $name = 'Hello'; public $uses = null; public $layout = "hello"; function index(){} function sendForm(){ ~フォームで送られたテキストを表示(プログラムは省略)~ } } [index.ctp]のフォームのHTML <form method="post" action="./sendForm"> ~省略~ <input type="submit" /> </form> http://www.example.com/sampleでフォームを開きテキストを入力して送信ボタンを押すと http://www/example.com/sample/sendForm というURLになるはずなのですが、 http://www.example.com/sendForm となってしまいます。 試しにブラウザから「http://www/example.com/sample/sendForm」というURLを入力してみますと、フォームで入力したデータは表示されませんが、ページ自体は表示されます。 もう一つ、index.ctpの<form method="post" action="./sendForm">のアクションのパスを /sample/sendForm に変更してみますとデータも表示され、求めた結果になります。 以前、別の環境でこのプログラムを動かしたときは、<form method="post" action="./sendForm">のままでうまくいったので、.htaccessのファイルの設定に問題があると予想されます。 下記にcakePHPの設定情報を記載しますので、間違っている部分を指摘していただければと思います。 ※ディレクトリの構成は下記のページの「3.4.3. 高度なセットアップ:その他のインストール方法」を参考にしています。 http://cakephp.jp/old_doc/ch03s04.html [アプリケーションディレクトリ] /home ____/me ________/mysite ____________/config ____________/controllers ____________/models ____________/plugins ____________/tmp ____________/vendors ____________/views ____________index.php ____________.htaccess→「htaccessファイル1」● [公開ディレクトリ] /var ____/www ________/html ____________/example.com→ドキュメントルート _______________/css _______________/files _______________/img _______________/js _______________.htaccess→「htaccessファイル2」● _______________css.php _______________favicon.ico _______________index.php [コアファイルディレクトリ] /usr ____/lib ________/cake ____________/cake ________________/config ________________/docs ________________/libs ________________/scripts ________________app_controller.php ________________app_model.php ________________basics.php ________________bootstrap.php ________________dispatcher.php ____________/vendors ____________/plugins ____________index.php ____________.htaccess→「htaccessファイル3」● 「htaccessファイル1」(アプリケーション) -------------------------------------------------- <IfModule mod_rewrite.c> RewriteEngine on   RewriteBase /cake/app→■追加  RewriteRule ^$ webroot/ [L] RewriteRule (.*) webroot/$1 [L] </IfModule> ------------------------------------------------- 「htaccessファイル2」(公開) -------------------------------------------------- <IfModule mod_rewrite.c> RewriteEngine On   RewriteBase / →■追加  RewriteCond %{REQUEST_FILENAME} !-d RewriteCond %{REQUEST_FILENAME} !-f RewriteRule ^(.*)$ index.php?url=$1 [QSA,L] </IfModule> -------------------------------------------------- 「htaccessファイル3」(コア) -------------------------------------------------- <IfModule mod_rewrite.c> RewriteEngine on   RewriteBase /cake→■追加 RewriteRule ^$ app/webroot/ [L] RewriteRule (.*) app/webroot/$1 [L] </IfModule> -------------------------------------------------- 疑問点は下記のようになっています。 (1)追加した部分のRewriteBaseはこれで良いのか? (2)RewriteRule ^$ webroot/ [L] RewriteRule (.*) webroot/$1 [L] の部分はこのままで良いのか?webroot部分の変更は必要か? (3)RewriteRule ^(.*)$ index.php?url=$1 [QSA,L]の部分はこのままで良いのか?

    • ベストアンサー
    • PHP
  • mod_rewrite(.htaccess)で静的化したいのですが。。

    mod_Rewrite(.htaccess)を使って静的化をしようとしています。 設定内容は、以下にしています。 --------------------- ■httpd.conf DocumentRoot "/var/www/html/" <Directory /> Options FollowSymLinks AllowOverride None </Directory> <Directory "/var/www/html/"> Options Indexes FollowSymLinks AllowOverride All Order allow,deny Allow from all </Directory> --------------------- ■.htaccess RewriteEngine on RewriteRule ^/free/([0-9,a-z,A-Z]+)$ /free/index.php?action=$1 --------------------- 上記の設定だと次ページが表示されません。 また、httpd.confの設定に以下を追加すると正常に次ページが表示され、URLの静的化されます。 --------------------- RewriteEngine on RewriteRule ^/free/([0-9,a-z,A-Z]+)$ /free/index.php?action=$1 --------------------- .htaccessが有効になっていないか、もしくは.htaccessの格納場所が間違えているかと 思っているのですが、いろいろ試してみましたが結局うまくいきません。 .htaccessの格納場所は、http://ローカルIP/free/配下に置いてあります。 どなたかご存知の方はいらっしゃいますでしょうか。 上記の設定内容だけだと情報が足りないなどございましたら、おっしゃってください。 宜しくお願い致します。

  • htaccess rewrite 無限ループ

    すでにあるサイトにhtaccessを設置して、 rewriteで日本語のファイル名でアクセスさせる方法を模索しています。 例↓ ・「http://www.example.jp/index.php」でアクセスされたら「http://www.example.jp/インデックス」 にリダイレクト。 ・「http://www.example.jp/インデックス」でアクセスされたら「index.php」 を表示させる。 htaccessの例↓ Options +FollowSymLinks RewriteEngine on RewriteRule ^index\.php$ /インデックス [R=301,L] RewriteRule ^インデックス$ index.php [L] 上記の設定だと無限ループになってしまいます。 index.phpでアクセスされたら404を返す方法も考えましたが・・・もっといい方法はないでしょうか?

    • ベストアンサー
    • PHP
  • CentOSでhtaccessを使用してmod_rewrite

    CentOSで、htaccessを使用してmod_rewriteを利用したいのですが、いまいちどうしたらいいのかがわかりません。 動的URLを静的URLに変換したく、 htaccessに RewriteEngine on RewriteRule ^([0-9A-Za-z_]+)/$ index.php?t=$1 [L] と書きこみました。 すると404エラーがでます。 試しに #RewriteEngine on RewriteRule ^([0-9A-Za-z_]+)/$ index.php?t=$1 [L] とコメントアウトしたところ、通常に表示されました。 RewiteEngine on が何かしらの影響を与えていると思うのですが、 対策がよくわからないので質問いたしました。 ちなみにhttpd.confの設定は完了しています。 LoadModule rewrite_module modules/mod_rewrite.so と記述。

  • mod_rewriteで動的ページを静的に変更

    PHPのカテゴリで同じ質問をしているのですが、3日目になっても、回答がいただけないので、同じ質問をさせていただきます。 動的ページを静的なページにしようとして、mod_rewriteの勉強をはじめようとしているのですが、疑問が出てきたので、確認させてください。 「何を当たり前のことを言ってるんだ。」と思われるかもしれませんが、教えて下さい。 htaccessからmod_rewriteを用いて、 (1)sampl.php?mod=1&id=3 を見かけ上、(2)sample/mod_1/id_3.html のようにすることは、mod_rewriteでできるということですが、 サイト全体を静的に見せようとしたら、プログラム側の呼出し(サイト内のリンク)を、(1)の形式から(2)の形式に全て変更しないといけないのでしょうか? htaccessだけをいじれば、静的にできると思い込んでいたのですが、 プログラムを変更しないといけないとなると、覚悟が必要なもので。。。

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

    SEOに効果があるのかも賛否両論ですが.htaccessに以下のような指定で 拡張子がphpのものをhtmlに変更しました。 RewriteRule ^([A-Za-z0-9]+).html$ $1.php [L] ○○.htmlにアクセスがあれば実際には○○.phpを表示させるという ことで成功はしたのですが○○.phpにアクセスしても普通にページが 表示されてしまいます。 ロボットがきてhtmlとphpと同内容があればなにか問題があるのかと 思い(根拠がない勝手な妄想ですが)○○.phpにアクセスがあれば実際に 表示するのは○○.phpですが○○.htmlへリダイレクトさせたいと 思っているのですがどうやれば可能でしょうか? また実際にサーバーにアップしてあるファイルの拡張子はphpなので すがmod_rewriteでこのような設定をしただけでロボットにhtmlとして 認識されるのでしょうか? mod_rewriteは初めて使うもので希望の動作に必要性があるのかすら よくわからない状況なのですが詳しい方がおりましたら是非ご教授を お願い致します。

  • mod_rewriteの書き方について

    よろしくお願いします。 サーバーをhttp://80codeを使っています。 今回、mod_rewriteを使って静的アドレスにしようとしていますが、 404エラー(見つかりません)がでてしまい、うまく表示されません。 設定が間違っていますでしょうか? http://repo.teki2.com/に両方のファイルとも設置しています。 接続しに行っているアドレスは、http://repo.teki2.com/1/ です。 http://repo.teki2.com/index.php?mode=1 だとうまくいきます。 .htaccessの内容 RewriteEngine on RewriteRule ^/([0-9a-zA-Z]+)/$ /index\.php?mode=$1 [L] index.phpの内容 <?php echo $mode; ?> よろしくお願いします。

    • 締切済み
    • CGI
  • .htaccessにmod_rewriteを設定して静的なURLにしたい

    .htaccessにmod_rewriteを設定して、動的なページのURLを静的なURLにしたいのですが、うまくいきません。 http://localhost/test/hoge.php/aiueo というURLで http://localhost/test/hoge.php?key=aiueo になるようにしたいのです。 検索して試しに以下のように記述したのですが、ダメでした。 <IfModule mod_rewrite.c> RewriteEngine On RewriteCond %{REQUEST_FILENAME} !-f RewriteCond %{REQUEST_FILENAME} !-d RewriteRule ^/test/hoge.php/(.+) /test/hoge.php?key=$1 [L] </IfModule> また「aiueo」の部分にスラッシュを含む場合もあるのですが、その際にも対応できるようにしたいです。 ご回答の程、よろしくお願いします。

    • ベストアンサー
    • PHP
  • mod_rewriteでURLを書き換えたい

    現在掲示板を運営していますが、Googleなど検索サイトからのクロールがうまく行われません(サイトマップなどは試しました)。 URLに“?”や“=”が含まれる動的なページはクロールされずらいことがあるとのことで、調べてみると、mod_rewriteを使うことで 静的ページのように表現できるということまでわかりました。 また、レンタルサーバに問い合わせた結果、mod_rewriteは.htaccessファイルに記述することで使用することができるとのことでした。 (例)http://www.aa.com/bb.php?cc=123 現在上記のようなURLで、最後の数字が入れ替わるようになっています。 このURLの“?”や“=”を“/”などを代用するなりして表示されないようにしたいと考えておりますが、 いろいろ調べてみましたが、私のスキルでは具体的にどのように書けばよいのかわかりませんでした。 .htaccessにいかように記述すればよいのでしょうか。 アドバイスのほどよろしくお願いいたします。