存在しないディレクトリ内の存在しないファイルに関する htaccess の問題

存在しないディレクトリ内の存在しないファイルに関する htaccess の問題

私は次の.htaccessファイルを使用しており、これはうまく機能しますが、ルート ディレクトリとサブディレクトリ (サブディレクトリが存在するかどうかに関係なく) 内の存在しないファイルへのアクセス試行もメイン ドメイン名に転送したいと考えています。

試してみましたFallbackResourceが、500 シリーズのエラーが発生しました。

RewriteEngine On

RewriteCond %{HTTP_REFERER} !^$
RewriteCond %{HTTP_REFERER} !^https://xxxxxxxxx.xxxxx/.*$ [NC]
RewriteRule \.(gif|jpg|jpeg|bmp|zip|rar|mp3|flv|swf|png|css|pdf)$ -     [F]

# browser requests PHP
RewriteCond %{THE_REQUEST} ^[A-Z]{3,9}\ /([^\ ]+)\.php
RewriteRule ^/?(.*)\.php$ /$1 [L,R=301]

# check to see if the request is for a PHP file:
RewriteCond %{REQUEST_FILENAME}\.php -f
RewriteRule ^/?(.*)$ /$1.php [L]

ErrorDocument 500 /redirect
ErrorDocument 500 /redirect
ErrorDocument 500 /redirect
ErrorDocument 404 /error
ErrorDocument 401 /redirect
ErrorDocument 403 /redirect

ご協力いただければ幸いです。

答え1

FallbackResourceURLは内部的に書き換えられた別のファイルに移す。しかし、外部リダイレクトこの状況ではどちらが望ましいでしょうか? また、FallbackResource既存の mod_rewrite ディレクティブと競合する可能性があります。 (ただし、FallbackResource構文に問題がある可能性もあるため、in-place の使用方法を確認しておくと便利です。)

ErrorDocument最後の mod_rewrite ディレクティブの後 (ディレクティブの前)に、次のようなものを試してください。

RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule ^ / [QSD,R=302,L]

上記は、リクエストがファイルにマップされず、ディレクトリにもマップされない場合は、ドキュメント ルート (一時的な 302) にリダイレクトすることを示しています。リクエストQSDからクエリ文字列を削除するには、が必要です。

余談:SEO (またはユーザー) の観点から懸念がある場合、これは推奨されません。


ErrorDocument 500 /redirect
ErrorDocument 500 /redirect
ErrorDocument 500 /redirect
ErrorDocument 404 /error
ErrorDocument 401 /redirect
ErrorDocument 403 /redirect

(500エラードキュメントを不必要に複数回定義する以外に...)書類ディレクティブで指定する値はErrorDocumentルート相対である必要がありますファイルシステムパス。例:(/redirect.phpしかし、それは実際にはリダイレクトそうでしょうか?) おそらく、実際には というファイルはありません/redirect(さらに書き直す必要があります)。

関連情報