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

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

新規登録して質問してみよう
ただいま回答率
85.35%
Webサイト

一つのドメイン上に存在するWebページの集合体をWebサイトと呼びます。

PHP

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

Q&A

解決済

1回答

924閲覧

PHPで動的なページのURLを記事番号だけにする

dodoragon

総合スコア2

Webサイト

一つのドメイン上に存在するWebページの集合体をWebサイトと呼びます。

PHP

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

0グッド

0クリップ

投稿2020/07/23 14:47

編集2020/07/24 11:27

PHPで作られているかは分かりませんが、このサイトteratailなどでもPHPのクエリをURLの末尾に?や&で繋げた表示はありません。

記事ページは https://teratail.com/questions/記事番号? だけになっています。
こういったURLはどのように実現されているのでしょうか?

ネットでの検索はいろいろとしましたが、適切な検索ワードが思いつかず。

PHP SEO URL 動的ページ クエリ GET WEBサイト GETなし クエリなし 省略

上記のようなワードしか思いつかず困っています。
英語のみの検索で英語サイトもいくらか見ていますが、日本語と同じで、主にGETの説明サイトばかりで…。

###追記
回答いただいた内容と、追加で調べた内容で具体的なやり方を記載します。
間違い・補足・他のやり方などあれば教えてもらえると助かります。

◯基本URL XXX.com/news/index.php?id=123
◯目標URL XXX.com/news/123
記事などのIDのみでアクセスしたい。
上記のようなURLのPHPを使った場合の一般的なやり方を具体的に知りたい。

mod_rewrite.cで内部的に書き換える方法をやりました。

htaccess

1<IfModule mod_rewrite.c> 2RewriteEngine on 3RewriteBase /news 4RewriteCond %{REQUEST_FILENAME} !-d 5RewriteCond %{REQUEST_FILENAME} !-f 6RewriteRule ^([0-9a-zA-Z]+)/?$ index.php?id=$1 [L] 7</IfModule>

この.htaccessをnewsディレクトリに配置するだけで記事IDのみでアクセスできるようになる。

RewriteRuleの所で記事IDである123を取得して、通常のindex.phpを使ったURLに内部的に書き換えているだけ。表示されるURLはアクセス時のまま。
各書式などは mod_rewriteなどで検索すると分かりやすいサイトがありました。
index.php内で$_SERVER['REQUEST_URI']を使っている場合、ここにはアクセス時のIDのみのURLが入っているのが注意点。

今回の内容に必要だった検索ワード
PHP $_SERVER['PATH_INFO'] mod_rewrite.c RewriteRule 静的URL URL書き換え

同一の質問
https://teratail.com/questions/221666
https://teratail.com/questions/217874
https://teratail.com/questions/180651

結局PATH_INFOを使った方法は、https://teratail.com/questions/221666のkawaxさんの回答だとmod_rewriteを使う1つ前のやり方なのでしょうか?PATH_INFOを使った他の良いやり方があるのでしょうか?PATH_INFO自体の解説サイトが少ししか見つからず、そのため今回は特に何も見つからずです。もし可能ならヒントでもいいので教えてもらえるとうれしいです。

###追記
複数クエリの場合は次の方法でいけると思いますが、間違っている場合は指摘が欲しいです。
XXX.com/news/animal/cat/123  ジャンル動物の、猫の123番の記事
XXX.com/news/index.php?p=animal/cat/123  上記をこのように.htaccessで書き換えするだけ
追記1の ([0-9a-zA-Z]+) ここをスラッシュも含むように修正するだけで上記の形に
あとは、index.phpで受け取った p をスラッシュでスプリットして扱うだけ

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

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

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

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

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

miyabi_takatsuk

2020/07/23 14:52

その > ネットでの検索はいろいろとしましたが の、検索してみたキーワードを列挙してください。 そうすれば、調べ方のコツも含めての回答を得られるかもしれません。
dodoragon

2020/07/23 15:02

PHP SEO URL 動的ページ クエリ GET WEBサイト GETなし クエリなし 省略 などです。 上のワードと他にもあったかもしれませんが、いろいろ組み合わせてGoogleで検索しています。
dodoragon

2020/07/23 15:03

英語のみで検索して英語サイトもいくらか見ています。
oute

2020/07/23 15:25

ここのシステムはわかりかねますが、ajaxを使ったりiframeを置いてtargetに指定したりなどでURLの変動はなくなるかと思いますが
oute

2020/07/23 15:26

あとはnode.jsとか?
hentaiman

2020/07/23 15:30

SEO URL 動的ページ クエリなしで検索したら日本語で出てきたけど ちゃんと読んでないだけじゃないの
dodoragon

2020/07/23 16:38

outeさんの言われていることはすぐには分からなかったのでまた調べたいと思います。 hentaimanさんの組み合わせのタグで全9ページ見ましたが、GETアクセスしてきたのを.htaccessで質問の通りの/区切りに、書き換えてリダイレクトする説明ページはありました。このページのことでしょうか?他は静的URL動的URLのSEO的説明ばかり…。後学のために、出てきたURL教えてもらえませんか?
hentaiman

2020/07/23 17:10

URLとかサイト名とか覚えてないけど普通に1ページ目に出てきたよ.htaccessの例があったので同じページだと思うよ あと質問文の内容だけだと方法は複数あるから、具体的にGETパラメーターのURL例と書き換えたい理想の例を複数挙げて質問した方が希望にマッチする回答つくんじゃない?
dodoragon

2020/07/23 17:23

ありがとうございます。確かに1ページ目にもphpの表記を書き換えるのは5行程度でありました!私が上げたのは後ろの方のページですね。次回からは基礎的一般的な内容でを付けて質問したいと思います。質問内容ももう少し細かく記述するようにしてみたいと思います!
hentaiman

2020/07/23 18:30

htaccessという単語が分かったら次はそれを含めて検索するとか、検索上手な人は仕入れた情報どんどん追加して検索試すもんよ
dodoragon

2020/07/23 18:35

もちろんそうやって検索してますよ。.htaccessの前にPATH_INFOの回答がもらえたので、PATH_INFOで検索して必要な内容も検索に出てきたので、とりあえず今回は終了していました。その後、.htaccess周りもいくらかは検索しています。
dodoragon

2020/07/23 21:21

ありがとうございます。その2つの質問を見ると、記事番号のみにするURLの仕組みが、magfさんに回答いただいて見当ついていた内容でしっかり合っているのが分かりました。ZZZ.com/index.php/AAA/BBBでのアクセスはすぐにできたのですが、ZZZ.com/AAA/BBB のように index.phpを消す方法を現在試し中です。上手くいったら回答のコメントに追加する予定です。上手く行かなかった場合は、また質問をさせてもらうかもしれません。
m.ts10806

2020/07/23 21:42 編集

サーバーの設定次第ですが、index.php,index.htmlなどはURLアクセス時に省略可能です。217874のほうの質問と回答からおおよそそのことは分かるかなと。「わざわざindexってURLに書かなくていい」という意味ですね。
hentaiman

2020/07/23 22:30

> outeさんの言われていることはすぐには分からなかったのでまた調べたいと思います。 これはスルーで良い。質問の意図とかけ離れ過ぎていて無駄。
hentaiman

2020/07/23 22:33

> .htaccessの前にPATH_INFOの回答がもらえたので、 なるほどね 質問文に載ってる情報がphpしかなかったからphpの範囲で回答くれただけだとは思うけど 環境によって取れる方法が違うからな
dodoragon

2020/07/24 04:43

m.ts10806の過去回答されている内容のやり方になっていると思うのですが、何か問題点など教えてもらえるとうれしいです。 環境は、PHP+レンタルサーバの安いプランです。それも最初に書いておくべきでした。
guest

回答1

0

ベストアンサー

WebサイトはHTTPサーバーで動いていますが、例えばNode.jsなどHTTPサーバーから書くような場合はURLを好きなように設定できます。
PHPでやりたい場合は$_SERVER['PATH_INFO']を使って/view.php/aaa/bbbのように、phpファイルの後にパスをつなげることができます。PHPのパスが/path/to/index.phpなど、ファイル名がindex.phpになっている場合は、PHPのファイル名を省略して/path/to/aaa/bbbのように書くこともできます。
$_SERVER['PATH_INFO']には、/aaa/bbbのように、.phpより後のパスが入ります。

投稿2020/07/23 15:32

magf

総合スコア212

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

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

dodoragon

2020/07/23 16:50

ありがとうございます! PATH_INFOでのやり方が求めていた内容だと思います! サイト構築をする場合の基礎的な内容だと思うのですが、PATH_INFOという単語すら検索しても出てきていませんでした。基礎的な技術でもWebに載ってないのか検索ワードがどうしても分からないのか、見つからない場合が、他の分野でもあることが多いです。なかなかそういった部分は教えてもらえることも少なかったので、大変助かりました。ありがとうございました。
magf

2020/07/26 15:30

おそらく、XXX.com/news/animal/cat/123にアクセスさせるとき、news/index.phpで処理する場合は.htaccessすら必要ないかもしれません(もちろん、Rを指定しない[L]だけの内部転送で?p=$1のようにもできるでしょう)
dodoragon

2020/11/19 12:25

気づけてなくコメントが遅くなってしまいました。 XXX.com/news/index.php/animal/cat/123というURLなら、$_SERVER['PATH_INFO']にanimal以降の文字列が格納されているので、それを使って処理できるというのは、まとめを書いた時に分かったことなのですが、これとは違いますよね。とりあえず今回の目的を達成できたので、ありがとうございました!
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.35%

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

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

質問する

関連した質問