私はインターネットを閲覧していて、たとえば、YouTubeに動画ページを示す次のようなURLが含まれていることに気付きました:http://www.youtube.com/watch?v=gwS1tGLB0vc
。
私のサイトでは、トピックページに次のようなURLを使用しています:http://www.example.com/page.php?topic_id=6f3246d0sdf42c2jb67abba60ce33d5cc
。
違いは、YouTubeでまだ気付いていない場合は、再生ページにファイル拡張子がないため、疑問に思っていますなぜ一部のサイトではファイル拡張子が使用されておらず、どのような用途に使用されているのですか?
URI(およびURL)は実装に依存しないという考えのため、ファイル拡張子は使用されません。ジョージWブッシュのアドレスにアクセスする場合は、 http:// www。 whitehouse.gov/presidents/georgewbush/addresses (たとえば)。ホワイトハウスのサーバーがPHPまたはPythonまたはPerlを使用しているかどうかはエンドユーザーには関係ないので、エンドユーザーには表示されません。 -ユーザーはページの生成方法を気にしません。すべてのWeb言語が同じHTML、CSSなどを出力し、Webブラウザーでページを表示しているだけだからです。
ほとんどのWebフレームワークでは、この機能がデフォルトで組み込まれています。これはまさにこの理由によるものであり、ほとんどのWebサーバーではURLの書き換えに関係なく実現できます。この理想は、W3Cスタイルガイドで体系化されており、このアイデアが非常に広く受け入れられていることは間違いなく大きな支持者です。それは彼らのガイドで概説されています "Cool URIs Do n't Change" 。これは、ここでの理由がまだ十分に理解されていない場合に明らかになります。このドキュメントは、この問題に関する重要な声明であり、フレームワークの事実上の標準です。
通常、最終的にdownloadedになるファイル(および場合によってはAJAXで使用されるデータファイル)のファイル拡張子は変更されないことに注意してください- http://example.com/song.mp または http://example.com/whitepaper.pdf -エンドユーザーのコンピューターに保存することを目的としているため、ファイル拡張子は重要です。単純に表示されているページ(ほとんどのページ)には、拡張機能は含まれていません。
表示されているのは、URLルーティングの例です。サーバーは特定のファイル(page.phpなど)を指すのではなく、実際にhtml(または返されたMIMEタイプに応じて何か)をレンダリングするハンドラーにリクエストを送るルーティングテーブルまたは設定を使用しています。気づいたら、StackOverflowも同じメカニズムを使用します。
拡張機能の有無は関係ありません。ブラウザは、URLで使用されている拡張子ではなく、サーバーから返されたMIMEタイプに基づいて動作します。
「なぜ?」と尋ねるとあなたは技術的な理由やデザイン上の理由を求めていますか?一部の人々はすでに技術に答えたので、デザインについてコメントします。
基本的には、そのURLがエンドポイントであるということになります。ユーザー/サービスがアクセスする必要がある場所です。ほとんどの場合、拡張子は関係ありません。ユーザーがWebを閲覧していて http://site.com/users にアクセスする場合、ユーザーのリストが必要です。彼はそれが.htmlや.phpを言わないことを気にしません。そして、これらの拡張機能を使用するデザイナーは、実際には意味がありません。アプリに意味を持たせたい場合、これらの拡張機能はユーザーが必要とする洞察を実際には提供しません。
他のアプリケーションが使用するサービスを作成している場合は、それらを使用する必要がありました。次に、拡張子を使用して、どのような種類のデータ(.json、.xmlなど)が返されるかを示すことができます。この設計ガイドラインと仕様に取り組んでいる人がいますが、それはすべて初期段階です
基本的に、これらの拡張機能が使用されます。これは、Webサーバー/クライアントがデフォルトで機能する方法だからです。 Web開発が成熟するにつれ、URLをより専門的に扱うようになり、URLを読んだり使用したりする人にとって意味のあるものになるように努めました。
拡張機能はブラウザーには関係ありません。ブラウザーは、それに渡されるヘッダーを使用して何を表示し、どのように表示するかを決定しますが、doサーバー上の問題。たとえば、ボックスにphpとRubyインタプリタの両方をインストールすることができますが、Webサーバーにはファイル拡張子をMIMEタイプにマップするための設定ファイルがあります。たとえば、Apacheのphp5.confから:
AddType application/x-httpd-php .php .phtml .php3
これは、.php、.phtml、および.php3で終わるファイルがPHPファイルであると認識される必要があることをApacheに伝えます。
ただし、拡張機能はクライアントにとって何の意味もないので、URLは拡張機能がなければ「見栄え」がよくなります。そうするために、Apacheの mod_rewrite
などのテクノロジーを使用して、クライアントランドURLを「書き換え」、サーバー上で意味を持たせることができます。
たとえば、mod_rewrite
ルールを設定して、http://yourblog.com/article/the-article-you-wrote
(見栄えがよく、入力して覚えるのも簡単です)のようなURLをhttp://yourblog.com/articles.php?title=the-article-you-wrote
に書き換えることができます。 PHPスクリプトへのリクエスト。
URLは、適切にユーザーインターフェイスの一部と見なされます。そのため、ユーザーがサイトのどこにいるか、およびサイトの構造に関する情報を伝えるように設計する必要があります。
次のようなURL:
mysite.com/sport/soccer/brazil_wins_worldcup
ユーザーにサイトの構造と現在の場所について多くを伝えます。対照的に:
mysite.com/article.php?cateogry=12&articleid=371
役に立たない、代わりに、サイトの作成に使用されている言語、その記事のIDが何であるかなど、関連性のない実装の詳細を公開します(そのIDの下でデータベースに格納されている可能性があります)
この倫理的な議論に加えて(ユーザーを無関係な実装の詳細に公開しないでください)、サイトを将来にわたって保証するのにも役立ちます。最初から選択する言語を公開したことがない場合は、後からRubyまたはPythonにアップグレードできます。世界中のすべてのリンクが404になります。
ユーザーにとって意味のあるURLを設計しますandは将来に備えます。
キーはHTTP応答ヘッダーのContent-Type
フィールド。そんな感じ:
HTTP 200 OK
Content-Type: video/flv
Content-Length: 102345
DATA-DATA-DATA-DATA-DATA-DATA-....
以下も参照してください。
Content-Disposition: attachment; filename=genome.jpeg;
modification-date="Wed, 12 Feb 1997 16:29:51 -0500";
まあ、ファイル拡張子はインターネット上では何の役にも立ちません。ブラウザはファイル拡張子が何であるかを気にしません。 CSSファイルを.aviとして提供できます。それでは、単純に省略しないでください。これにより、URLを短くすることができます。
さらに、URLの「書き換え」により、より読みやすいURLが可能になります。あなたは理解できないかもしれません/categories.php?id=455
しかし、あなたは行います /455-some-category
。
これを自分で行い、Apacheを使用している場合は、mod_rewriteを参照してください。
これには多くの可能な答えがあります。 Webブラウザが解釈する結果になるのは、Webアプリケーションサーバーの構成方法です。 URLの書き換えまたはルーティングを使用している状況があり、他の人が言ったように、要求されたURLまたは拡張機能に対して提供しているハンドラー。
" http://cory.com/this/really/doesnt/exist "のようなURLを使用して、実際に " http://cory.com/ this.does.exist.12 "必要に応じて。
Webサーバーの通常の動作は、要求されたURIパスをドキュメントルートディレクトリのどこかにあるファイルにマップすることです。したがって、http://example.com/foo/bar
は単に/path/do/document/root/foo/bar
にマッピングされます。さらに、Webサーバーはファイルの処理方法を知っている必要があります。これは多くの場合、ファイル名拡張子によって行われます。したがって、ファイル名拡張子が.php
のファイルは、PHPインタープリターによって処理されます。
この通常の動作とは別に、ほとんどのWebサーバーには、マッピング(つまり RL rewriting )とファイル名拡張子のないファイルの処理方法の両方を変更できる機能があります。
Apache Webサーバーの場合、前者は mod_rewrite で実行できます。
RewriteEngine on
RewriteRule ^/watch$ /watch.php
そして後者は mod_mime で行うことができます:
<File watch>
ForceType application/x-httpd-php
</File>
(実際、これはmod_mime機能ではなく、 core 機能です。)
ルール:ファイル拡張子をURIに含めないでください
Webでは、ピリオド(。)文字は一般的に、URIのファイル名と拡張子部分を区切るために使用されます。 REST APIは、メッセージのエンティティボディの形式を示すために、URIに人工的なファイル拡張子を含めないでください。代わりに、Content-Typeヘッダーを介して伝達されるメディアタイプに依存する必要があります。本文のコンテンツを処理する方法を決定します。
(1) http://api.college.restapi.org/students/3248234/transcripts/2005/fall.json (2) http://api.college.restapi。 org/students/3248234/transcripts/2005/fall
(1)ファイル拡張子は、フォーマット設定を示すために使用しないでください。 (2)REST APIクライアントは、HTTPが提供するフォーマット選択メカニズムであるAcceptリクエストヘッダーを利用するよう推奨されます。参照:デザインREST apiルールブック
その下で、HTMLまたはPHP拡張子なしでurlを正しく実行するために.htaccessで使用するもの。
RewriteEngine on
RewriteCond %{REQUEST_FILENAME} !-d
RewriteCond %{REQUEST_FILENAME}\.html -f
ブラウザで指定された名前のファイルがWebサーバーのディレクトリ(-d)またはファイル(-f)と一致しない場合、以下のルールを書き換えます
RewriteRule ^(.*)$ $1.html
私は以下がどのように機能するかわかりませんが、それがhtmlで書き直した後、それがまだそれに一致しない場合はphpで書き直していると思います
RewriteCond %{REQUEST_FILENAME}\.php -f
RewriteRule ^(.*)$ $1.php
それでも一致しない場合は、404ページが表示されます。
.htaccessの以下のコードで404をリダイレクトすることもできます
ErrorDocument 404 /404.html
私のサイトでコードが機能していることが重要です。
それらはファイル拡張子を必要としません。