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

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

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

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

HTML

HTMLとは、ウェブ上の文書を記述・作成するためのマークアップ言語のことです。文章の中に記述することで、文書の論理構造などを設定することができます。ハイパーリンクを設定できるハイパーテキストであり、画像・リスト・表などのデータファイルをリンクする情報に結びつけて情報を整理します。現在あるネットワーク上のほとんどのウェブページはHTMLで作成されています。

Q&A

解決済

3回答

1940閲覧

さくらインターネットでhtaccessのRewriteRuleを使ってもGETが空になる原因について

Praline

総合スコア46

PHP

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

HTML

HTMLとは、ウェブ上の文書を記述・作成するためのマークアップ言語のことです。文章の中に記述することで、文書の論理構造などを設定することができます。ハイパーリンクを設定できるハイパーテキストであり、画像・リスト・表などのデータファイルをリンクする情報に結びつけて情報を整理します。現在あるネットワーク上のほとんどのウェブページはHTMLで作成されています。

0グッド

0クリップ

投稿2017/08/19 15:52

編集2017/08/21 16:42

###前提・実現したいこと
さくらインターネット スタンダードプランにて、htaccessを利用したアドレスの書き換えを行いたいです。
example.com/hoge/というアドレスを、example.com/hoge.php、
クエリがある場合はexample.com/hoge/id=1をexample.com/hoge.php?id=1に書き換えたいです。

###該当のソースコード

MultiviewsMatch Any RewriteEngine On RewriteRule ^hoge/(.*) hoge.php?$1 [QSA,L] ErrorDocument 404 /404.php

hoge/という文字列が見つかれば、hoge.php?1に書き換えるコードとなります。

###発生している問題・エラーメッセージ
example.com/hoge.phpというURLにはアクセスができるのですが、クエリ部分が反映されず、GETの中身が空です。

###試したこと
試しに上記htaccessのまま、fugo.phpというファイルを同じディレクトリに格納し、example.com/fugo/にアクセスしたところ、example.com/fugo.phpの内容が表示されました。
もちろんfugo/を書き換える処理は一切記載しておりません。

検索したところ同様の現象が起きている方が居たのですが、
ほとんど解決したというMultiviewsMatch Anyを追記しても症状が解決しません…

この情報だけですが、ヒントを頂けると助かります。

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

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

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

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

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

退会済みユーザー

退会済みユーザー

2017/08/21 01:10

例示するときのドメイン名は、example.comを使いましょう。url.comは実在するサービスのドメインです。
Praline

2017/08/21 16:41

失礼いたしました…修正させていただきます。
kei344

2017/08/22 00:13

まだ質問が「受付中」になっていますが、いったん「解決済」にされてはいかがでしょうか。
guest

回答3

0

ベストアンサー

example.com/hoge/id=1をexample.com/hoge.php?id=1
に変換するのは難しいと思います。

example.com/hoge/id=1
id=1は、?の後ろにあるわけではなので、パラメータではなくURLのパスの一部となります。
そのため、=は実際は「%3d」という値にエスケープされています。

多分、一般的には下記の二通りの解決方法になるのではないかと思います。
①idと1をパスとして分ける(最近のRESTful API的な考え方としてはこちらが近い)
example.com/hoge/id=1

example.com/hoge/id/1
としてパスの一部として認識可能にする

RewriteRule ^/hoge/id/([^/]*) /hoge.php?id=$1 [QSA,L]

②元の値をパラメータ化する
example.com/hoge/id=1

example.com/hoge/?id=1
のように「?」を入れてGETパラメータ(クエリ文字列)としたうえで、下記のようにパラメータはそのままリライト先に引き継ぐ

RewriteRule ^/hoge/ /hoge.php [QSA,L]

投稿2017/08/21 03:53

編集2017/08/21 06:09
kitaji0306

総合スコア176

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

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

Praline

2017/08/21 16:41

見た目をすっきりさせたいということで'?'を消したのですが、パスの一部として認識されるんですね… 確かにhoge/?id=1とし、htaccessの中身を修正することで、アドレスを修正することができました。 他の方もアドバイスありがとうございます。 一旦解決しましたので、ベストアンサーとさせていただきます。
guest

0

kitaji0306さんの回答に追加。
$_SERVER["QUERY_STRING"]に、"id%3d1"が渡るので、それを自分で解析する。

投稿2017/08/21 16:36

otn

総合スコア84555

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

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

kitaji0306

2017/08/21 23:09

@otn そうですね、URLの構造が変更出来ない場合も多いと思いますので、そういう時には力わざも必要ですねw
guest

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

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

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.48%

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

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

質問する

関連した質問