web-dev-qa-db-ja.com

失敗したページをリダイレクトするためのmod_rewriteルールに関する質問

失敗したページをカスタムの「Page Not Found」ページにリダイレクトするmod_rewriteルールを設定しています。これはWordPressにあります。 Apacheサイトのオンラインチュートリアルを使用しましたが、これまでのルールは次のようになります。

RewriteCond   %{REQUEST_FILENAME} !-f
RewriteRule   ^(.+)   http://example.com/?page_id=254 [R]

これは動作します。 -Uフラグは何もしなかったので、最初の提案と2番目の提案を組み合わせたように見えます。

私の質問は、好奇心から次のことが起こる理由です:REQUEST_FILENAMEREQUEST_URIに変更すると(2番目の例が示すように)、ページはロードされますが、スタイルシートはロードされません。私の書式設定はすべてなくなり、これはすべてのページで発生します。なぜこれが起こるのか誰でも考えることができますか?

3
Chris Laplante

カスタム404を設定するには、次のように(.htaccessでも)はるかに簡単にできるはずです。

ErrorDocument 404 http://example.com/?page_id=254

参照: ErrorDocument

Mod_rewriteに比べて、リクエストごとの乱雑さが少なく、CPU使用量が大幅に少なくなります。ただし、可能であれば、特にエラードックを静的ページにすることを検討してください(特に、500エラードックが500エラーをスローすると面白くない)。

4
tadamson
RewriteCond   %{REQUEST_FILENAME} !-f

私の質問は、好奇心から次のことが起こる理由です:REQUEST_FILENAMEREQUEST_URIに変更すると(2番目の例が示すように)、ページはロードされますが、スタイルシートはロードされません。私の書式設定はすべてなくなり、これはすべてのページで発生します。

REQUEST_FILENAMEREQUEST_URIには、ディレクトリごとのhtaccessファイルに異なる値が含まれています。 REQUEST_FILENAMEはファイルへの完全なローカルファイルシステムパスであり、REQUEST_URIは要求されたURIのパスコンポーネントです(ファイルシステム上の実際のファイルとは限りません)。

-fは、TestStringが通常のファイルであるかどうかをテストしますが、REQUEST_URIは通常そうではありません。これがおそらくスタイルシートのリクエストがリダイレクトされる理由です。

ただし、メインページのREQUEST_URIは通常のファイルとして表示されているように見えます(または、他のディレクティブが最初にリクエストを取得しています)。これは、URL構造と.htaccessファイル内のその他のディレクティブに依存します。

0
MrWhite

非常に奇妙な。 FFでは、デバッグに Firebug または Tamper Data を使用できます。ソースコード(Ctrl + U)も参照し、その中のスタイルシートリンクをクリックします。エラーコンソール(Cntl + Shift + j)も参照してください。

0
alvosu

WordPressについて話している場合は、REQUEST_URIが期待どおりに設定されていないため、既にリダイレクトが使用されている可能性があります。したがって、失敗しています。たとえば、?page_id=100にアクセスする場合、リクエストURIは実際には空の文字列である可能性があります。舞台裏でindex.phpを使用している場合でも、条件付けの時点では、おそらく設定されていません。

mod_rewrite debugging をオンにすると、パターンマッチングのさまざまな手順を確認できます。何が起こっているのかを知りたい場合は、そうすることを強くお勧めします。 :)

0
Redmumba