私は次の.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
FallbackResource
URLは内部的に書き換えられた別のファイルに移す。しかし、外部リダイレクトこの状況ではどちらが望ましいでしょうか? また、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
(さらに書き直す必要があります)。