3

HTTPエラーにカスタムページを使用したいので、.htaccessファイルを使用します。同時にURL書き換えを使用したいのですが、うまくいかず、理由がわかりません。

これは私の.htaccessです:

#Rewrite options
RewriteEngine On    # Turn on the rewriting engine

#Error
RewriteRule    ^error/([0-9]{3})/?$    index.php?page=error-$1 [NC,L]

#Other options
ErrorDocument 403 error/403
ErrorDocument 404 error/404

<Files .htaccess>
order allow,deny
deny from all
</Files>

IndexIgnore *
Options All -Indexes
4

2 に答える 2

10

ErrorDocumentディレクティブの引数は、文字列、内部URI、または外部URIにすることができます。ここにある「error/404」バリアントは文字列として解釈されるため、Apacheはハードコードされたエラーメッセージであるかのように出力します。これは私たちが今望んでいることではありません。

ここで、スラッシュを前に付けると、「/ error / 404」はローカルリダイレクトになりますが、DocumentRootに対してローカルになります。したがって、http://example.com/testit/.htaccessに.htaccessファイルがあり、 http //example.com/testit/something.txtをリクエストすると、ドキュメントhttp://example.com/error /404が読み込まれます。これを回避するには、サブディレクトリのパス(/ testit / error / 404)を前に付けるか、DocumentRootを試してみてください。ただし、これはすでにソフトリダイレクトであることに注意してください。ブラウザのアドレスバーにユーザーが入力したURIが表示されるため、ErrorDocumentのURIをきれいにする必要はありません。ただ

ErrorDocument 404 /path-to-my-folder/index.php?page=error-404

完全に良好な動作を提供します。たとえば、見つからないexample.com/something.txtをリクエストすると、アドレスバーには引き続きexample.com/something.txtが表示されますが、index.php?page =エラー-404が提供されます。

ただし、本当にブラウザのアドレスバーに/ error / 404を表示したい場合は、ErrorDocumentに引数として絶対URIを指定します。ErrorDocument 404 http://my-server/my-path/error/404これにより、ブラウザはそのドキュメントにハードリダイレクトします。リクエストはmod_rewriteルールによってキャプチャされ、index.php?page = error-404のコンテンツが提供されますが、アドレスバーには引き続き/ error/404が表示されます。このメソッドの欠点は、404応答ヘッダーを手動で設定する必要があり、元のリクエストが何であったかがわからないことです。また、ロボットを混乱させる可能性があり、訪問者を混乱させる可能性があります。これは、訪問者が期待する動作ではないためです。

私のアドバイスは、次のように相対リンクにすることです。

#Rewrite options
RewriteEngine On    # Turn on the rewriting engine

#Other options
ErrorDocument 403 /path-to-my-subfolder/index.php?page=error-403
ErrorDocument 404 /path-to-my-subfolder/index.php?page=error-404

IndexIgnore *
Options All -Indexes
于 2012-05-28T14:37:04.703 に答える
1

どうですか

Options +FollowSymLinks
# Turn mod_rewrite on
RewriteEngine On
RewriteBase /

#Other options
ErrorDocument 403 error/403
ErrorDocument 404 error/404

#Error
RewriteRule    ^error/([0-9]{3})/?$    index.php?page=error-$1 [NC,L]

したがって、最初にカスタムエラーページを指定してから、それらの(環境に優しい)URLを書き直します...

于 2012-05-24T16:21:54.553 に答える