質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.37%
mod_rewrite

ApacheウェブサーバーのためのURL書き換えモジュールです。主にプリティーURLに使われていますが、同様に単純置換を超えた、多様なタスクの処理能力や柔軟性があります。

PHP

PHPは、Webサイト構築に特化して開発されたプログラミング言語です。大きな特徴のひとつは、HTMLに直接プログラムを埋め込むことができるという点です。PHPを用いることで、HTMLを動的コンテンツとして出力できます。HTMLがそのままブラウザに表示されるのに対し、PHPプログラムはサーバ側で実行された結果がブラウザに表示されるため、PHPスクリプトは「サーバサイドスクリプト」と呼ばれています。

Q&A

解決済

2回答

7646閲覧

POSTデータを保持したままmod_rewriteで転送したい

yamahubuki

総合スコア13

mod_rewrite

ApacheウェブサーバーのためのURL書き換えモジュールです。主にプリティーURLに使われていますが、同様に単純置換を超えた、多様なタスクの処理能力や柔軟性があります。

PHP

PHPは、Webサイト構築に特化して開発されたプログラミング言語です。大きな特徴のひとつは、HTMLに直接プログラムを埋め込むことができるという点です。PHPを用いることで、HTMLを動的コンテンツとして出力できます。HTMLがそのままブラウザに表示されるのに対し、PHPプログラムはサーバ側で実行された結果がブラウザに表示されるため、PHPスクリプトは「サーバサイドスクリプト」と呼ばれています。

1グッド

0クリップ

投稿2019/06/28 13:30

Apache+PHPでウェブアプリを作っています。

前提

  • http://example.com/posts/0001/comments/create のようなURLに、POSTでリクエストが来る
  • 0001の部分は投稿IDなので毎回変わります。
  • 私が仕様を変更できる立場にないため、POST先URLは変えられません。
  • このままでは、各投稿ごとにディレクトリを生成し、各ディレクトリにコメントを作成するPHPファイルが必要になってしまいます。
  • それは明らかにおかしいので、http://example.com/postcomment.php に、POSTでもらったBody付でリダイレクトしたいです。
  • このURLでは0001がなくなってしまっていますが、それは後からサーバ変数で取ってくればよいことが分かりました。
  • 下記のように、.htaccessファイルを書いて、mod_rewriteによるリダイレクトを試しました。
  • しかし、これをするとGETリクエストとなってしまい、POSTされてきたデータが取得できません。

どのようにすれば、1つのPHPファイルで、様々なURLにPOSTされてきたリクエストを処理できるでしょうか。

試した.htaccessファイルの内容

Apacheの.htaccessに、
RewriteEngine on
RewriteBase /posts/
RewriteRule ^.+/comments/create/?$ postcomments.php [L]

codebydeer❤️を押しています

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

guest

回答2

0

ベストアンサー

このままでは、各投稿ごとにディレクトリを生成し、各ディレクトリにコメントを作成するPHPファイルが必要になってしまいます。

普通は、下記のように/postsをプログラムにして、/0001/comments/createは、PATH_INFO等で参照すると思います。

Apache

1<Files "ports"> 2SetHandler application/x-httpd-php 3</Files>

投稿2019/06/28 13:46

otn

総合スコア85766

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

yamahubuki

2019/06/28 13:53

URL的にはディレクトリであっても、それをファイルで処理できたのですね! これで解決できそうです。 ありがとうございました。
otn

2019/06/28 14:12

最初から設計する場合は多分そうします。 一方、最初 /index.php?id=00001&op=create のように作った後で URL を変えたいという場合は、リライトを考えると思います。
guest

0

307 Moved temporarily
を利用すればいけるかもしれません

投稿2019/06/28 13:35

yambejp

総合スコア116443

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

yamahubuki

2019/06/28 13:42

RewriteRuleでR=307を指定する方法で試してみたのですが、 これを行うと、サーバ変数(PHPで$_SERVER["REQUEST_URI"]から参照)が変わってしまい、投稿番号(例では001)が取得できなくなってしまいます。 307リダイレクトだと、いったんリクエスト元にレスポンスが帰って可ら再度クライアントがリクエスト送信となるため、難しそうです…。
yambejp

2019/06/28 13:45

mode_rewriteではなくPHP側で転送してはだめなのでしょうか?
yamahubuki

2019/06/28 13:56

そうですね。otnさんの回答でようやく普通のやり方が分かりました。 一度posts.phpで受けて、PHP内部で振り分けられそうです。 ありがとうございました。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.37%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問