0

多くのサイトは、定評のあるサイトであっても、URLの処理方法が異なることに気付きました。

Stack Overflow: http://stackoverflow.com/questions/tagged/url+php
Google: https://www.google.com/search?q=url+handling
Facebook: http://www.facebook.com/userID
Normal PHP: http://example.com/page.php?param=1&other=2

Wordpressは、異なるURL構造間で簡単に変更できます。

私の最初の質問は単純です。サイトがURLを処理する方法をどのように変更しますか?なんらかのhtaccessリライトを設定する必要があると思いますが、よくわかりません。

また、/パラメータの受け渡しに使用するサイトでは、これらのサイトはどのようにして特定のフォルダにアクセスしますか?私は通常http://example.com/includesincludesを使用してフォルダーにアクセスしますが/、パラメーターを渡すために使用している場合、サイトは自分が何をしようとしているのかをどのように知ることができますか?

私の2番目の質問はもっと重要です:なぜサイトはURL構造を変更するのですか?その背後にある理論的根拠は何ですか?ユニークなだけですか?パフォーマンスはどうですか...サーバー上で最も軽いのはどれですか?それとも、実際の違いはなく、企業はブラウザのURLバーで特定の構造が見栄えが良いと考えているだけですか?

4

2 に答える 2

1

あなたの質問にもっと徹底的に取り組むために、私はあなたの注意を一時的にウェブサーバーから離れて、HTTPプロトコルとそれが基本的にどのように機能するかに向けたいと思います。

HTTPは、REQUEST-RESPONSEモデルで構成される非常に単純なプロトコルです。クライアント(基本的にはユーザーのブラウザ)は、HTTPリクエストヘッダーと呼ばれるものを送信します。このヘッダーには、空でないHTTPリクエスト本文がある場合とない場合があります。https://stackoverflow.com/questions/tagged/url+phpのようなURLにアクセスする場合、ヘッダーは次のようになります。

GET /questions/tagged/url+php HTTP/1.1
Host: stackoverflow.com
Connection: keep-alive

HTTPリクエストヘッダーの1行目で、stackoverflowサーバーに送信するためにブラウザが作成することに注意してください。この行全体は、3つの非常に単純な部分で構成されています。

  1. リクエスト動詞。通常はGETやPOSTのようなものです(ただし、他の多くのものもあります)。これは、サーバーが応答することを期待するように、要求をどのように処理するかをサーバーに指示します。
  2. リクエストパス。ホストが受け入れる任意のパスと、クライアントが提供するオプションのクエリ文字列で構成でき、通常はURLエンコードする必要があります。
  3. リクエストが行われたプロトコルバージョン。これは通常、HTTP/1.1またはHTTP/1.0のいずれかです。

この要求の2行目は、クライアントがこの要求で到達しようとしているホスト名をサーバーに提供します。

これで、サーバー側では、Webサーバーがこの実際の要求を受信すると、その要求を処理することを選択できます。ただし、一般的なapache / nginx / lighttpd Webサーバーのセットアップでおそらくよく使用される動作は、クライアントによって提供されるパスがドキュメントのルートディレクトリ内の物理パスと一致する必要があることです。これは真実からほど遠いです。これは、Webサーバーがリクエストを処理できる唯一の方法です。各リクエストを異なる方法で処理するようにWebサーバーに指示することを選択できます。

例として、Apacheのhttpd Webサーバーはmod_rewriteを提供します。これは、サーバーが正規表現や特定の条件セットなどの特定のルールに基づいて要求URIを別の場所にリダイレクトできるように、要求URIを書き換えるようにWebサーバーに指示できます。

   <Directory />
            Options -Indexes FollowSymLinks MultiViews
            AllowOverride None
            Order allow,deny
            Allow from all

            RewriteEngine On
            RewriteBase /
            RewriteRule ^index\.php$ - [L]
            RewriteCond %{REQUEST_FILENAME} !-f
            RewriteCond %{REQUEST_FILENAME} !-d
            RewriteRule . /index.php [L]
    </Directory>

上記は、WordPressの書き換えルールが通常.htaccessファイルを提供するように見える非常に単純な例です。ただし、代わりに仮想ホストファイルからこれを取得しました。これは、通常、.htaccessを使用するよりもはるかに高速です。.htaccessを使用することを決定する前に、.htaccessに入れたいものをapache.confのvhostDirectoryディレクティブに入れることを常に検討してください。これらはランタイムファイルであり、本質的に低速です。一般的に言えば、mod_rewrite自体は遅いので、最後の手段としてのみ使用する必要があります。

いずれにせよ、この書き換え作業はすべて、そのvhostsのルートディレクトリにあるWebサーバーに着信DocumentRootする要求をリダイレクトしてindex.phpファイルにリダイレクトし、その要求を内部で処理して、どのPHPスクリプトを含めるかを決定します。このリクエストとページのレンダリング方法。

これは貧乏人のやり方です。これは通常、フロントコントローラーまたはフロントルーターと呼ばれます。これは、リクエストURIと、特定のリクエストURIに対するレスポンスのレンダリングを処理する実際の方法との間の仲介役として機能します。

あなたがstackoverflowまたはgoogleの場合、これらのリクエストをはるかに高いレベルで処理し、データセンター内の他のサーバーに到達して、そのリクエストURIに基づいてリクエストのレンダリングを処理するリバースプロキシ(基本的にロードバランサー)があります。

GET /questions/tagged/url+php HTTP/1.1私たちが行ったのは、クライアントのHTTPリクエストヘッダーの一部を取り、それに応答する方法を知っている別のスクリプトまたはプログラムに送信することだけだったことを思い出してください。あなたのウェブサーバーがあなたのためにできるのと同じように。

于 2013-01-07T03:31:12.910 に答える
0

最初の質問では、Webサイトの一部のフォルダーがユーザーに表示されません。いくつかのメディアファイルの例。これは.htaccessファイルで行います

以下のコードは、ディレクトリリストを非表示にします。ユーザーがブラウザをインデックスファイルのないディレクトリにポイントすると、この場合403エラーが発生します

Options -Indexes 

ディレクトリを表示したい場合は

Options +Indexes

このリンクを参照してくださいhttp://viralpatel.net/blogs/htaccess-directory-listing-enable-disable-allow-deny-prevent-htaccess-directory-listing/

2番目の質問の場合-通常、人々がURL書き換えを使用している理由は、わかりやすいURLが原因ですSEO

検索しながらそれが前面に出てきます。

たとえば、商品の詳細ページがあり、クエリ文字列で商品IDを渡しています。Rewriteは、クエリ文字列をスラッシュ付きの適切なURLに変更します。これは、グーグルが検索結果を見つけるのに非常に役立ちます。

RewriteEngine On
RewriteRule ^products/([a-zA-Z]+)/([0-9]+)/$ index.php?product=$1&price=$2

以下のリンクが役に立ちます。

http://zenverse.net/seo-friendly-urls-with-htaccess/

http://httpd.apache.org/docs/2.0/misc/rewriteguide.html

于 2013-01-07T03:18:25.493 に答える