URL を /server/?Server=ServerName
から /server/ServerName
に単純に書き換えて、ServerName
パラメータが渡されるようにしようとしています。 PHP 。
現在、.htaccess
ファイルにこれがあります:
/server/ServerName
または /server/?Server=ServerName
を表示しようとすると、404 エラーが発生しました。
これは私の書き換えログです:
リーリーこの時点で、私はイライラしていて、単純なことが欠けているように感じているので、少し指導が必要です。
調整してみました:
コードの書き換えも検討し、実際に書き換えられているかどうかを確認してみました。
以下のコードを使用して、ディレクトリ /test2/
を /server/?Server=ServerName
に正常に書き換え、ページが正常に読み込まれたので、モジュールがアクティブで実行中であることがわかります。 .
この変更を試みましたが、失敗しました。 URL は書き換えられませんが、ページは読み込まれます。 Apache 2.4 .htaccess フレンドリーな URL 書き換え
ああああ
あなたは間違った方向に進んでいるようです。 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 のためであり、アプリを「機能」させるためではありません。
つまり、次の順序で要約すると、次のとおりです。/server/ServerName- 形式の URL にリンクします。
(オプション) 既存の URL 構造を変更する場合は、直接リクエストを /server/?Server=ServerName- (または
(正規 URL/リンク先の URL) から - /server/index.php?Server=ServerName
ルート .htaccess
ファイル内:/server/index.php?Server =ServerName##) にリダイレクトします。 #) を
/server/ServerName(正規 URL) に変更します。
内部的にリクエストを
/server/ServerName(プロセス) に書き換えます。要求された基礎となるファイル)。
リーリー
フラグを使用できるように Apache 2.4 を使用していることを前提としています。これにより、「書き換えられた」リクエストではなく直接リクエストをチェックする最初のルールに追加のこれは、最後のルールで
ENDcondition
部分はオプションです。を含める必要がなくなります (リダイレクト ループを回避するため)。
最初のルール (「リダイレクト」) の index.php%1
/ ではなく後方参照には、前述の
conditionで取得された
Server URL パラメーターの値が含まれています。 ServerURL パラメータは空であってはならず、(前のルールで指定した正規表現に従って) ドットやスラッシュを含めることはできません。そうでない場合、パラメータはリダイレクトまたは書き換えられません。正規表現文字クラスのリテラル ドットにはバックスラッシュ エスケープが必要ないことに注意してください。
リクエストされた URL
が末尾のスラッシュで終わらない (つまり、/server/ServerName である) (例に基づいて) と仮定していることに注意してください。 server/ ServerName/) なので、
NERewriteRule
pattern の末尾にあるオプションの/?
last ルールを削除しました。ログの抜粋はそうではないことを示唆しているように見えますが? URL の末尾のスラッシュと末尾以外のスラッシュを許可する必要がある場合は、重複したコンテンツ (スラッシュスラッシュのない URL は別の URL です)。Server
URL パラメーター値に何を期待するかに応じて、(
noescape
) フラグが必要な場合とそうでない場合があります。QUERY_STRING
サーバー変数は URL エンコードされます。これがこのコンテキストにおけるデフォルトの動作であるため、
.htaccess
でPT
(passthrough
) フラグを使用する必要はありません。 (PT
フラグは、server または virtualhost のコンテキストで mod_rewrite を使用する場合にのみ関連します。)