失敗したページをカスタムの「Page Not Found」ページにリダイレクトするmod_rewrite
ルールを設定しています。これはWordPressにあります。 Apacheサイトのオンラインチュートリアルを使用しましたが、これまでのルールは次のようになります。
RewriteCond %{REQUEST_FILENAME} !-f
RewriteRule ^(.+) http://example.com/?page_id=254 [R]
これは動作します。 -U
フラグは何もしなかったので、最初の提案と2番目の提案を組み合わせたように見えます。
私の質問は、好奇心から次のことが起こる理由です:REQUEST_FILENAME
をREQUEST_URI
に変更すると(2番目の例が示すように)、ページはロードされますが、スタイルシートはロードされません。私の書式設定はすべてなくなり、これはすべてのページで発生します。なぜこれが起こるのか誰でも考えることができますか?
カスタム404を設定するには、次のように(.htaccessでも)はるかに簡単にできるはずです。
ErrorDocument 404 http://example.com/?page_id=254
参照: ErrorDocument
Mod_rewriteに比べて、リクエストごとの乱雑さが少なく、CPU使用量が大幅に少なくなります。ただし、可能であれば、特にエラードックを静的ページにすることを検討してください(特に、500エラードックが500エラーをスローすると面白くない)。
RewriteCond %{REQUEST_FILENAME} !-f
私の質問は、好奇心から次のことが起こる理由です:
REQUEST_FILENAME
をREQUEST_URI
に変更すると(2番目の例が示すように)、ページはロードされますが、スタイルシートはロードされません。私の書式設定はすべてなくなり、これはすべてのページで発生します。
REQUEST_FILENAME
とREQUEST_URI
には、ディレクトリごとのhtaccessファイルに異なる値が含まれています。 REQUEST_FILENAME
はファイルへの完全なローカルファイルシステムパスであり、REQUEST_URI
は要求されたURIのパスコンポーネントです(ファイルシステム上の実際のファイルとは限りません)。
-f
は、TestStringが通常のファイルであるかどうかをテストしますが、REQUEST_URI
は通常そうではありません。これがおそらくスタイルシートのリクエストがリダイレクトされる理由です。
ただし、メインページのREQUEST_URI
は通常のファイルとして表示されているように見えます(または、他のディレクティブが最初にリクエストを取得しています)。これは、URL構造と.htaccessファイル内のその他のディレクティブに依存します。
非常に奇妙な。 FFでは、デバッグに Firebug または Tamper Data を使用できます。ソースコード(Ctrl + U)も参照し、その中のスタイルシートリンクをクリックします。エラーコンソール(Cntl + Shift + j)も参照してください。
WordPressについて話している場合は、REQUEST_URI
が期待どおりに設定されていないため、既にリダイレクトが使用されている可能性があります。したがって、失敗しています。たとえば、?page_id=100
にアクセスする場合、リクエストURIは実際には空の文字列である可能性があります。舞台裏でindex.php
を使用している場合でも、条件付けの時点では、おそらく設定されていません。
mod_rewrite debugging をオンにすると、パターンマッチングのさまざまな手順を確認できます。何が起こっているのかを知りたい場合は、そうすることを強くお勧めします。 :)