Apache 2.4 URL 書き換え: /server/?Server=ServerName から /server/ServerName
P粉038161873
P粉038161873 2024-01-16 19:21:09
0
1
482

URL を /server/?Server=ServerName から /server/ServerName に単純に書き換えて、ServerName パラメータが渡されるようにしようとしています。 PHP 。

現在、.htaccess ファイルにこれがあります:

リーリー

/server/ServerName または /server/?Server=ServerName を表示しようとすると、404 エラーが発生しました。

これは私の書き換えログです:

リーリー

この時点で、私はイライラしていて、単純なことが欠けているように感じているので、少し指導が必要です。

調整してみました:

  • mod_rewrite クエリ文字列は 404
  • を返します
  • .htaccess の $1 と %1 の違い
  • .htaccess RewriteRule を使用すると 404 エラーが発生するのはなぜですか?
  • https://httpd.apache.org/docs/2.4/rewrite/remapping.htmlの例を使用する
  • https://cheatography.com/davechild/cheat-sheets/mod-rewrite/
  • からマークアップを引用

コードの書き換えも検討し、実際に書き換えられているかどうかを確認してみました。

以下のコードを使用して、ディレクトリ /test2//server/?Server=ServerName に正常に書き換え、ページが正常に読み込まれたので、モジュールがアクティブで実行中であることがわかります。 .

リーリー

この変更を試みましたが、失敗しました。 URL は書き換えられませんが、ページは読み込まれます。 Apache 2.4 .htaccess フレンドリーな URL 書き換え

ああああ

P粉038161873
P粉038161873

全員に返信(1)
P粉182218860

あなたは間違った方向に進んでいるようです。 HTML ソースでは /server/ServerName にリンクする必要があるため、内部的にリクエストは /server/ServerName から /em> /server/index に書き換えられます。 .php?Server=ServerName (コメントに記載されているように、index.php を追加することに注意してください)。 /server/index.php?Server=ServerName は、実際にリクエストを処理する基礎となる (隠し) ファイルへのパスです。

最後の行で言及されているようですが...

URL を書き換える必要があります。書き換えないとページが読み込まれません。 「書き換え」とは正確に何なのかについて混乱があるかもしれません。これにより URL は変更されません。 URL を 変更するために .htaccess を使用しません。 HTML ソース内の URL (リンク先の URL) を手動で変更する必要があります。

必要に応じて、後で (オプションで) 外部「リダイレクト」を実装できます。これにより URL が変更されます。ただし、この は、古い URL にリンクしたりインデックスを作成したりする検索エンジンやサードパーティをリダイレクトするためにのみ使用されます。つまり、これは SEO のためであり、アプリを「機能」させるためではありません。

つまり、次の順序で要約すると、次のとおりです。

HTML ソース コード内の URL を変更して、
    /server/ServerName
  1. 形式の URL にリンクします。 (オプション) 既存の URL 構造を変更する場合は、直接リクエストを
  2. /server/?Server=ServerName
  3. (または /server/index.php?Server =ServerName##) にリダイレクトします。 #) を /server/ServerName (正規 URL) に変更します。 内部的にリクエストを /server/ServerName
  4. (正規 URL/リンク先の URL) から
  5. /server/index.php?Server=ServerName (プロセス) に書き換えます。要求された基礎となるファイル)。 ルート
  6. .htaccess
ファイル内:

リーリー これは、最後のルールで END

フラグを使用できるように Apache 2.4 を使用していることを前提としています。これにより、「書き換えられた」リクエストではなく直接リクエストをチェックする最初のルールに追加の

condition を含める必要がなくなります (リダイレクト ループを回避するため)。 最初のルール (「リダイレクト」) の index.php

部分はオプションです。

%1 後方参照には、前述の condition で取得された Server URL パラメーターの値が含まれています。 Server URL パラメータは空であってはならず、(前のルールで指定した正規表現に従って) ドットやスラッシュを含めることはできません。そうでない場合、パラメータはリダイレクトまたは書き換えられません。正規表現文字クラスのリテラル ドットにはバックスラッシュ エスケープが必要ないことに注意してください。 リクエストされた URL が末尾のスラッシュで終わらない (つまり、

/ ではなく

/server/ServerName である) (例に基づいて) と仮定していることに注意してください。 server/ ServerName/) なので、RewriteRule pattern の末尾にあるオプションの /?last ルールを削除しました。ログの抜粋はそうではないことを示唆しているように見えますが? URL の末尾のスラッシュと末尾以外のスラッシュを許可する必要がある場合は、重複したコンテンツ (スラッシュスラッシュのない URL は別の URL です)。 Server URL パラメーター値に何を期待するかに応じて、

NE

(noescape) フラグが必要な場合とそうでない場合があります。 QUERY_STRING サーバー変数は URL エンコードされます。

これがこのコンテキストにおけるデフォルトの動作であるため、.htaccessPT (passthrough) フラグを使用する必要はありません。 (PT フラグは、server または virtualhost のコンテキストで mod_rewrite を使用する場合にのみ関連します。)

いいねを押す +0
人気のチュートリアル
詳細>
最新のダウンロード
詳細>
ウェブエフェクト
公式サイト
サイト素材
フロントエンドテンプレート