URLについて

このQ&Aのポイント
  • URLについて理解を深めましょう。
  • URLの構成やパラメータの影響について考えてみましょう。
  • URLの終わり方やパラメータの有無によって、アクセス先が変わることがあるので注意しましょう。
回答を見る
  • ベストアンサー

URLについて

よく、 http://www.sample.com/category/ とか http://www.sample.com/category/music/ とか、「/」でアドレスが終わっているページがありますが、これは実際には http://www.sample.com/category/index.php http://www.sample.com/category/music/index.html という構成なのでしょうか? 知りたいのは2点です。 質問1. なぜ、「/」で終わるようにして http://www.sample.com/category.php http://www.sample.com/category/music.html としないのでしょうか? 質問2. あと、もしパラメータをつけるとしたら http://www.sample.com/category.php?id=hoge は、 http://www.sample.com/category/ だとどのようになるのでしょうか?

  • suffre
  • お礼率76% (2013/2633)
  • HTML
  • 回答数7
  • ありがとう数9

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

  • ベストアンサー
  • Ogre7077
  • ベストアンサー率65% (170/258)
回答No.6

末尾が / の URL が要求された場合 Webサーバーが Apache で静的ファイルを表示するなら、 このモジュールが表示するファイルを決定します http://httpd.apache.org/docs/2.4/mod/mod_dir.html Webサーバーが mod_rewrite などで URL を書き換えるなら、 書き換えた先の CGI なり PHP なりが実行され、その結果が表示されます Webサーバーが Tomcat(などのJavaEEサーバー) なら、 URL にマッピングされたサーブレットが実行され、その結果が表示されます 例) http://www.javadrive.jp/servlet/webxml/index4.html 例) http://www.mkyong.com/webservices/jax-rs/jax-rs-path-uri-matching-example/ つまり外部から見ただけでは構成は不明です。 回答1. 個人的には REST の流行が一番の原因だと思います。 http://ja.wikipedia.org/wiki/REST この哲学にしたがえば URL は「リソースを一意に識別する汎用的な構文」 であることを求められますので、 良) http://www.example.com/category/ ← category・引数なし、のリソースを表す 悪) http://www.example.com/category.php ← 拡張子は唯のシステム都合なので邪魔 悪) http://www.example.com/category/index.html ← いわずものがな この哲学が浸透したので、検索エンジンもこの形式を好むようになり、 SEO に有利という風潮が生まれたのかと推測します。 回答2. URL の仕様的には、以下はすべて正常です。 http://www.example.com/category.php?id=hoge http://www.example.com/category/?id=hoge 余談ではありますが http://allabout.co.jp/gm/gc/23887/

suffre
質問者

お礼

ありがとうございます。 拡張子付きはよくない、みたいに覚えておけばいいですかね^^; 余談のところで、sample.comは大丈夫とのことでしたが、普通にsample.comはサイトがあるっぽいですね・・・。

その他の回答 (6)

  • Ogre7077
  • ベストアンサー率65% (170/258)
回答No.7

> sample.comは大丈夫とのことでしたが 誤) sample 正) example 間違いやすいで注意しましょう 根拠 http://suika.fam.cx/rfc/ja-translations/rfc2606-ja.html 3. 予約例示第二位ドメイン名

回答No.5

まず、こちらですが、 >http://www.sample.com/category/index.php >http://www.sample.com/category/music/index.html > >という構成なのでしょうか? > はい、こういった構成です。 質問1、/で終わらなくても大丈夫です。/で終了しなければならない理由は(多分)ないです。 ただ、気おつけなければいけないのは、同一のコンテンツが複数のURLで表示されてしまう件です。 質問2、は、 「論理的かつ人間が理解できる方法で(可能な場合は ID ではなく意味のある単語を使用して)URL を構成できるよう、コンテンツを分類します。」なので、パラメータはない方がSEO的には良いと認識してくたさい。 こんな感じで如何でしょうか?お役に立てましたでしょうか?

suffre
質問者

お礼

ありがとうございます。 ネットでPATH_INFOについて検索したらSEO的なことが書いてありました。

  • ORUKA1951
  • ベストアンサー率45% (5062/11036)
回答No.4

>ちょっと質問2の部分が無知なためなかなか理解できないですが…。  PATH_INFO だと思いますが、サーバーはデフォルトでそのファイルがなければ、その末尾は捨てててPATH_INFOに格納して、上位のファイルかディレクトリを探します。ルートまでたどって、はじめてNot Foundを返すのですよ。rewriteなんてまったく関係ないです。  例えば、先の例で言うと /abc/efg/hij/klmのうち、abcが実行ファイルでしたら、PATH_INFO/efg/hij/klmを使ってページを作ればよいし、もしabcがディレクトリでそのディレクトリにDIRECTORY_INDEXで指定された実行ファイルがあれば、それを起動すればユーザーには、 /abc/efg/hij/klmのファイルが提出されたとしか見えない。  とっても単純で明快なシステムですよ。  あなたがレンタルサーバーお持ちでしたら 適当なHTMLファイルをルートに/test/というフォルダーを作って入れておきます。 abc/というディレクトリを作って、そこに AddType application/x-httpd-cgi index.html; としておきます。これでindex.htmlはCGIとして動作します。 [index.html] #/usr/local/bin/perl # PerlへのPATHを書いておく print "Content-type: text/html\n\n"; if($ENV{'PATH_INFO'}){  $filename = '/test'.$ENV{'PATH_INFO'};  if( -f $filename ) {   open(IN,"<$filename");   while(<IN>){    print $_;   }  else{   while(<DATA>){    print $_;   }  } else{  while(<DATA>){# __END__以降の内容をそのまま使う   print $_;  } } __END__ <html>  <head>   <title>タイトル</title>  </head>  <body>  ・・・・・HTMLソースを書く  </body> </html> これだけで、http://hoge.com/abc/などでアクセスされると、・・指定されたファイルがあたかもあるように表示される。  プログラム書いたことなくても、おおよそは理解できるはずです。実際に使用するときはエラーへの対処、画像や他のファイルのときのContent-typeの記述、出力HTMLの一部書き換えなどが加わります。例えば各ページに共通なメニューなどはここで追加すれば良いでしょう。

suffre
質問者

お礼

ありがとうございます。 なんとなく・・・ですがわかってきました。

  • JaneDue
  • ベストアンサー率75% (263/350)
回答No.3

>という構成なのでしょうか? 既出の通り、一般的にはそうですが、サーバ側で自由に設定できます。 ただし「実際の構成」とはまったく違うことも多く、URLが http://example.com/category/music/ だったとしても、サーバの中には[category]ディレクトリも[music]ディレクトリも存在しないこともよくあります。 サイトがある程度の規模になると、細かくディレクトリ分けして大量のページを作成するのではなく、 http://~/controller.php?ct1=category&ca2=music のように「判定・振り分けプログラム」(コントローラ)にパラメータを渡して処理する方が楽です。 しかしこれだと閲覧者からは分かりにくく、何より「 動的URLはSEOでは不利 」と言われています(諸説あり)。  なので mod_rewriteという機能で、動的URLを静的URLに 内部で変換して http://~/category/music/ => http://~/?ct1=category&ca2=music として処理する手法がよく取られています。 ( mod_rewrite 静的 動的 とかで検索してみて下さい) ※実際どのように処理されているのかは外部からは分かりません。 質問1 サーバ側の管理方法によるので何とも言えませんが、前記のようにディレクトリ名をパラメータに変換している場合、ファイル名は必要ないことも多い 質問2 無理やりとするなら、ファイル名が無ければ指定ファイル(例index.php)になるので http://www.sample.com/category/?id=hoge になるかと。

suffre
質問者

お礼

ありがとうございます! mod_rewrite、そういえば昔使ったことあります! 自分の場合はresult.php?date=20140501を、result20140501.htmlに変えていました。 それをディレクトリっぽくしているのですね。 気づきませんでした・・・。 わざわざディレクトリっぽくそうするのはSEOのためなのですか。 なんとなく、拡張子がphpだと「phpで書いているのか?」と思われるのがセキュリティ的にNGだからディレクトリっぽくしているのかと思いました。

  • ORUKA1951
  • ベストアンサー率45% (5062/11036)
回答No.2

具体的な例で示したほうがわかりやすいかも。 なお拡張子は、一切忘れてください。(windowsとは違う) ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ サーバーがクライアントから、 GET: /abc/efg/hij/klm という要求を受けたとします。 1)klmというファイルが存在していれば、そのファイルの設定を確認します。  ファイルの種類がtext/htmlと指定してあれば、応答ヘッダ(Content-type:)にtext/html、画像でしたらimage/jpeg などをつけてクライアントに返します。  それが実行ファイルでしたら、処理プログラムに引き渡します。 2)klmがディレクトリでしたら、開いて  ・DIRECTORRY INDEXに指定してあるファイルがあればそれを順番に   index.html index.php INDEX.HTM とか複数設定することもある  ・それがなくて許可されていればディレクトリ一覧を返す 3)klmというファイルもディレクトリもないと、PATH_INFという環境変数に/klmを格納して/hijについて、上と同じ判別を行なう。 4)サーバーのトップまで帰って、この処理を行なう。  (注)サーバーのトップにDIRECTORY INDEXで実行ファイルが指定してあれば、PATHINFO(/abc/efg/hij/klm)を渡して実行  なければNOT FOUNDを返す。 >質問1.なぜ、「/」で終わるように  通常はURLの簡略化でしょう。DIRECTORY_INDEXが指定してあれば、1動作負担をかけますが・・ >質問2.あと、もしパラメータをつけるとしたら  パラメーターの渡し方はいくつもあります。  ?以降のQUERY_STRING  /以降のPATH_INFO  要求のヘッダに続く、本文--標準入力 >http://www.sample.com/category/music.html  の/category/music.htmlがすべて、PATH_INFOであって、物理的にはそれは存在しない場合もあります。  新聞社のサイト、個別の記事のURLはすべてPATH_INFOです。Wikiの HyperText Markup Language - Wikipedia( http://ja.wikipedia.org/wiki/HyperText_Markup_Language ) の/HyperText_Markup_Languageも明らかにPATH_INFOですね。

suffre
質問者

お礼

ありがとうございます。 仕組みとしてはそのような方法なのですね。 ちょっと質問2の部分が無知なためなかなか理解できないですが…。 もう少し検索して調べてみます^^;

  • ok-kaneto
  • ベストアンサー率39% (1798/4531)
回答No.1

>という構成なのでしょうか? 違います。 http://www.tohoho-web.com/wwwxx076.htm ファイル名省略時にどのファイルを表示するかはWebサーバにより異なります。 ディレクトリとファイルの違いはご存知ですよね? 一般的にはindex.htmlですがphp等を利用している場合はディレクトリ毎に違うかもしれません。 >質問1. サーバ管理者の一存なので... ディレクトリ毎にアクセス権限やサーバを変更できますのでそれで変更するか、情報を管理する単位でディレクトリを分けている場合が多いかと。 >質問2. パラメータはブラウザ側で指定するのは無理でしょう。

suffre
質問者

お礼

ありがとうございます! そうですね、ファイルを省略した場合のはわかるのですが、なぜURLの最後をファイルにしないでディレクトリで終わらせているサイトが多いのか疑問に思いましたので質問させて頂きました。 質問2は無理なのですね。

関連するQ&A

  • 動的URLから静的URLへの301リダイレクト

    下記のように動的URLを静的なURLに置き換えています。 http://www.sample.com/dir/aaa/index.php?content_id=1 ↓ http://www.sample.com/aaa_index.content_id_1.htm この動的URLを、置き換えた静的URLへ301リダイレクトさせたいのですが、うまくいきません。 htaccessの記述を下記のようにしましたが、多分、動的URLの「?」があるためうまくいかないようです。 RewriteEngine on RewriteBase / RewriteRule ^dir/aaa/index\.php?content_id=(.*)$ /aaa_index.content_id_$1.htm [R=301,L] 「?」が含まれる動的URLから静的URLに301リダイレクトさせたい場合、どのように記述すれば良いでしょうか?

  • URLのパラメータを取得しリンクに渡すには?

    Javascriptで、URLのパラメータを取得し、リンクにパラメータを渡したいです。 例えば、現在のURLが、 http://www.hogehoge.com/hoge.php?page=hoge1だとします。 そのページに、様々なリンクがあるとします。 <リンク例> http://www.hogehoge.com/moge/moge.php http://www.hogehoge.com/boge/boge.php http://www.yahoo.co.jp/auctionxx.html このうち、/moge/以下のページへのリンクにのみ、自動で現在のURLのパラメータを渡したリンクにしたいです。 つまり、 http://www.hogehoge.com/moge/moge.php ↓ http://www.hogehoge.com/moge/moge.php?page=hoge1 というリンクにしたいです。 当然現在のURLにパラメータが存在しない場合は、そのままのリンクになります。 また、他のディレクトリや他のドメインのサイトにはパラメータを渡さず、変更せずにそのままのURLのリンクにしたいです。 <リンク例> http://www.hogehoge.com/moge/moge.php ○変更 http://www.hogehoge.com/boge/boge.php ×変更なし http://www.yahoo.co.jp/auctionxx.html ×変更なし よろしくお願いします。

  • 静的URL変換について

    現在,phpでウェブサイトを作成しているのですが、 サイト内検索をしたときのURLを静的化できないか、考えております 例)getで送った際のURL hoge.com/search.php?keyword=hoge 修正後 hoge.com/kewyword_hoge.php そして、その際にやりたいことは、hoge.com/kewyword_hoge.phpをインデックスさせ このURLのページにアクセスしてきたときにhoge.com/search.php?keyword=hogeを 実行するようにしたいのですが、これって可能でしょうか? 静的URL変換自体は問題ないのですが、 hoge.com/kewyword_hoge.phpにアクセスしてもhoge.com/search.php?keyword=hoge を実行してくれず困っております。 恐れ入りますが、解決策をご教授いただけませんでしょうか? 何卒宜しくお願いします。 また、私のやりたいことは以下のサイトで参考になります。 ■インデックスされているURL(google) http://j-sen.jp/kanto/keyword_%E3%81%86%E3%81%A9%E3%82%93.htm ■サイト内検索のURL http://j-sen.jp/search/?area=kanto&nmin%5Bname%5D=&nmin%5Btime%5D=&nmin%5Bn%5D=&wage=&freeword=%E3%81%86%E3%81%A9%E3%82%93&day=&hour=&feature%5B%5D=&feature%5B%5D=&medical=1&except_medical=0&x=82&y=22 どちらも検索結果は同じですが、サイト内検索のURLを静的化し、 google先生にインデックスさせています。 お手数ですが、改めて解決策のご教授お願い申し上げます。

    • 締切済み
    • PHP
  • クエリのあるURLを短縮して301リダイレクトしたいのですが。

    何度やってもダメだったのでぜひ教えてください。 http://hoge.com/index.cgi?id=2&mode=individual&no=1&eid=973 というアドレスから http://hoge.com/index.cgi?mode=individual&eid=973 に301リダイレクトするにはどう.htaccessに記せばよいのでしょうか? RedirectPermanent /index.cgi?id=2&mode=individual&no=1&eid=973 http://m.wayohoo.com/index.cgi?mode=individual&eid=973 だと飛びませんでした。どう書けば飛んでくれるのでしょうか?ぜひご教示お願いいたしますm(_ _)m

    • 締切済み
    • CGI
  • ちょっと複雑なURL分解について

    http://hoge.com/test.php?mode=link&id=3& url=http://hogehoge.com/ (表示上の問題でURLを途中で改行しています) 上記のようなURLを取得($_GET)した場合に、URLを分解して下記の値を得るスクリプトを作成しています。 $mode値:link $id値:3 $url値:http://hogehoge.com/ これだけであれば特に悩む必要はないのですが、問題は$url値に以下のようなデータが与えられた場合です。 http://hoge.com/test.php?mode=link&id=3& url=http://hogehoge.com/index.php?mode=abc&id=123 (表示上の問題でURLを途中で改行しています) このようなURLを取得($_GET)した場合に、以下の値を得るにはどう処理すれば良いのでしょうか。 $mode値:link $id値:3 $url値:http://hogehoge.com/index.php?mode=abc&id=123 どなたか詳しい方がいらっしゃいましたら、ご教授お願い致します。

    • ベストアンサー
    • PHP
  • URLのリダイレクトについて

    現在イントラネット上でWebページ公開のテストを行っています。 以下の構成を考えいます。  ・ドキュメントルート直下にindex.htmlを配置  ・ドキュメントルート/HOGE にindex.htmlを配置 (1)http://ドメイン/  のURLでブラウザを立ち上げると、index.htmlが正しく表示されます。 次に (2)http://ドメイン/HOGE/  のURLでブラウザを立ち上げると、HOGE配下のidex.htmlが正しく表示されます。 次に (3)http://ドメイン/HOGE  のURLでブラウザを立ち上げると、HOGE配下のidex.htmlが表示されますが、  URLが 『http://IPアドレス/HOGE/ となってしまいます。 IPアドレスが表示されないようにする方法はあるのでしょうか? いろいろ調べてみて、METAタグ等を使って、http://ドメイン/HOGE/ にリダイレクトするように したのですが、Webブラウザが無限ループしていまいます。 何かいい方法はあるのでしょうか? よろしくお願いします。

    • ベストアンサー
    • HTML
  • php化して、.htaccessでリダイレクトしたが、index.phpが強制的に表示されてしまう

    1.トップページをhtmlからphpに変更しました。 旧)http://www.hoge.com/index.html 新)http://www.hoge.com/index.php 2.「.htaccess」に301リダイレクトを記述しました。 Redirectpermanent /index.html http://www.hoge.com/index.php 3.困ったこと http://www.hoge.com/ でアクセスしたときに http://www.hoge.com/index.php に転送されてしまう。 できれば、 http://www.hoge.com/ このまま表示してほしいんですが、 .htaccessの記述に問題があるのでしょうか? すみません、分かる方には簡単なのかもしれませんが、 教えて頂ければ助かります。

    • 締切済み
    • PHP
  • [PHP]URLパラメータの受け取り方

    こんにちは。 PHPで下記のことを実装しようとしていますが、なかなかうまく行きません。 http://example.com/aaa というURLにアクセスがあった場合、「aaa」だけを抜き出して処理する、 ということを実装したいのですが、上記アドレスにアクセスするとNotFoundになってしまいます。 上記の場合、「aaaというファイルを探しにいく」という処理がされているためNotFoundになることは分かるのですが、どのようにすればindex.phpでaaaをパラメータとして受け取れるのでしょうか? ※システムの都合上、http://example.com/?id=aaaという風には出来ません。 大変恐縮ですがご教授いただけるとありがたいです。

    • ベストアンサー
    • PHP
  • htaccess.サブディレクトリURL非表示

    お世話になります。 以下のようなサイトがあるとします。 http://hoge.com/index.php ←ログインフォーム http://hoge.com/aaa/index.php ←会員用サイト http://hoge.com/bbb/index.php ←非会員用サイト 最初のアクセスは必ず/index.phpが受け取り、ログイン判定後/aaaか/bbbにリダイレクトします。この時に、aaaやbbbをURLに表示させない方法はあるのでしょうか。 よろしくお願いいたします。

  • .htaccessで動的URLを静的化

    動的URLを静的化したいと考えています。 ネットで調べるとよくあるサンプルは RewriteRule ^/dir/([0-9A-Za-z]+)/([0-9A-Za-z]+)$ /dir/index.php?a=$1&b=$2 という風に「静的なURLにアクセスして、内部ではパラメータ付きのURLでの処理をさせる」 というパターンが多いのですが、私がやりたいのは逆で「動的URLにアクセスがあれば静的URLにリダイレクトをさせる」というものです。 理由は、 ・すでにサイトがある程度できあがっていて、既存のURLもある程度Googleにインデックスされている ・パラメータの組み合わせパターンが色々あるため上記のようなルールで対応できない などです。 そこで http://xxx.com/dir/index.php?a=01&b=02 や http://xxx.com/dir/index.php?b=02&c=03&x=999 といった動的URLを http://xxx.com/dir/a-01/b-02/ http://xxx.com/dir/b-02/c-03/x-999/ RewriteRuleを使ってこのような形で一旦301リダイレクトさせ、これをPHPの内部処理でパラメータ付きURLに戻すことによって既存のロジックを生かしたままURLを静的化できないかと考えています。 RewriteRuleの記述を色々書き換えて試してみたのですが、どうしてもやりたいようなURLの変換ができません。 どのように記述すればよいか、ご教授下さい。 よろしくお願いいたします。

    • ベストアンサー
    • PHP

専門家に質問してみよう