0

htaccessを正しく設定するのに行き詰まっています。現在、私は次の状況にあります。

1). mydomain.com/my/details.php?pid=top-news-around

2). mydomain.com/my/toplinks/link.php?id=top-news-around

.htaccessはmydomain.com/details.php?pid=1111で正常に機能しますが、mydomain.com / toplinks / link.php?id= top -news-aroundでは機能しません。.htaccessの何が問題なのか教えてください。

RewriteEngine On

RewriteRule ^([a-zA-Z0-9-/]+)$ my/details.php?pid=$1
RewriteRule ^([a-zA-Z0-9-/]+)/$ my/details.php?pid=$1

RewriteRule ^([a-zA-Z0-9-/]+)$ my/toplinks/link.php?id=$1
RewriteRule ^([a-zA-Z0-9-/]+)/$ my/toplinks/link.php?id=$1

ご協力いただきありがとうございます

4

2 に答える 2

1

繰り返しますが、条件は同じです。それらを変更して、別のファイルにアクセスします。お気に入り:

RewriteEngine On

RewriteRule ^details/([a-zA-Z0-9-/]+)$ my/details.php?pid=$1
RewriteRule ^details/([a-zA-Z0-9-/]+)/$ my/details.php?pid=$1

RewriteRule ^link/([a-zA-Z0-9-/]+)$ my/toplinks/link.php?id=$1
RewriteRule ^link/([a-zA-Z0-9-/]+)/$ my/toplinks/link.php?id=$1

mydomain.com/details/top-news-aroundとのような呼び出しmydomain.com/link/top-news-around

于 2012-07-25T19:25:59.167 に答える
1

この問題を理解するために、リクエストがサーバーに届いたときに Apache が何をしているのかを見てみましょう。

  1. ブラウザが をリクエストしhttp://mydomain.com/an/example/pageます。これを行うために、HTTP を使用して mydomain.com のサーバーに接続し、GET /an/example/page要求を送信します (すべての通常の HTTP 要求ヘッダーと共に)。 リクエストパス/an/example/pageです。

  2. Web サーバー (Apache) は、要求を処理するために使用するファイルを決定する必要があります。ここでは多くのことが行われていますが、最終的には.htaccess、ドキュメント ルートにあるファイルから始めて、ファイルを読み取るようになります。

  3. Apache はRewriteRule ^([a-zA-Z0-9-/]+)$ my/details.php?pid=$1、指定された正規表現に対してリクエスト パスをチェックする行に到達します。正規表現は、クラス内の 1 つ以上の文字で完全に構成されている任意の文字列と一致します[a-zA-Z0-9-/]an/example/page正規表現と一致するため、Apache は相対URL を に書き換えますmy/details.php?pid=an/example/page

  4. フラグを設定していないため、Apache は引き続き新しいURL を他のルールと[L]照合しようとします。新しい URL にはドットが含まれているため、一致しません。ファイルが呼び出され、クエリ文字列と、そのスクリプトの実行からの出力がブラウザーに返されます。my/details.phppid=an/example/page

.htaccess の最初の正規表現は非常に広いため、ドットを含まない要求された URLのほとんどすべてに一致します。これは、ドットなしで行うすべてのリクエストが最初のルールによって書き換えられることを意味します。(末尾のスラッシュに注意) のようなものでも(末尾のスラッシュを含む/an/example/page/) に書き換えられることに注意してください。これは、Apache が 2 番目の正規表現を見る前に最初の正規表現に一致するためです (末尾のスラッシュを削除するように設計されているようですが、 URL と照合される機会が決して得られないため、そうではありません)。my/details.php?pid=an/example/page/

これにより、.htaccess ファイルが期待どおりに機能しない理由が明確になることを願っています。希望どおりに機能させるには、他の人が例を示しているように、より具体的なパターン マッチングを使用する必要があります。しかし、すべての URL がどのように表示され、どこに移動したいかを知らなければ、正しい答えを誰も教えてくれません。

于 2012-07-25T19:58:50.553 に答える