2017-05-04 48 views
1

私はすべての "404"エラーをPHPファイルにリダイレクトします。私は最初のステップとしてWordpressの.htaccessを使用しました。動作しますが、パスがフォルダの場合は、最後に「/」が付いていることを意味します。禁止されたエラーが発生します。Apache htaccessはすべて404(ファイルとフォルダ)をリダイレクトします

RewriteEngine On 
RewriteBase/
RewriteRule ^index\.php$ - [L] 
RewriteCond %{REQUEST_FILENAME} !-f 
RewriteCond %{REQUEST_FILENAME} !-d 
RewriteRule . /includes/redir.php [L] 

私がしようとした場合:予想通り

http://example.com/anything 

作品を、私のredir.phpにリダイレクトします。しかし、私が試してみると:

http://example.com/anything/ 

は、禁止されたエラーを返します。

redir.phpに存在しないものすべてにリダイレクトする必要があるのは何ですか? httpd.confを変更する必要がありますか?私は "ErrorDocument 404 /includes/redir.php"行が必要ですか?

+2

これは実際にはWordPressサイトではありません。 – MrWhite

+1

いいえ、それはPHPサイトです、私はちょうど出発点としてWordpressサイトから.htaccessを使用しました。 – Arvy

+1

上記の例では、 '/ anything'は物理ディレクトリですか?それ以外の場合は、403 Forbiddenエラーが発生してはなりません。 – MrWhite

答えて

1

"ErrorDocument 404 /includes/redir.php"行が必要ですか?

はい、このような ErrorDocument指示は、手動でエラー文書にリダイレクト/リライトするよりもはるかに好ましい方法です。

ErrorDocumentは、正しいHTTPステータスコードを返します(これを手動で行う必要はありません)。そして、PHPは、このエラーに関連する追加の変数を$_SERVERスーパーグローバルに設定します。

RewriteEngine On 
RewriteCond %{REQUEST_FILENAME} !-f 
RewriteCond %{REQUEST_FILENAME} !-d 
RewriteRule^/includes/redir.php [L] 

ではなく、パスがフォルダである場合には、意味、持っていた「/:あなたは、特に代わりに、あなたのような何かができる404上のファイルに書き換えたい場合


"最後に、私は禁じられたエラーを取得します。

URLがディスクの物理フォルダにマップされていない限り、URLがフォルダのように見えるかどうかは本当に重要ではありません。ディレクトリ索引文書がない場合にのみ、403 Forbiddenが取得されます。

+1

それだけです! ErrorDocumentが必要であり、RewriteBaseを削除します。ありがとう! – Arvy

+1

'RewriteBase'ディレクティブは実際にこのコンテキストで何もしていませんでした。 'RewriteBase'指示文は相対パス(スラッシュまたはスキームで始まっていないパス)_substitutions_に使われるパスを設定するだけです。 'RewriteRule^redir.php'(' redir.php'は_relative_、 '/ redir.php'はそうではありません)。あなたが相対的なパスを持っていない場合、それは余分です。 ( 'RewriteBase'ディレクティブには多くの混乱がありますが、それだけです) – MrWhite

+1

ありがとうございました。とにかく、あなたの指示を使用して、今働いています。私は他のこともやってみましたが、今は問題を解決する別のものがあるかどうかは絶対に分かりません。しかし、あなたの助けと情報は本当に感謝しています。 – Arvy

関連する問題