404エラーをリダイレクトした後URLを書き換える htaccess 質問する

404エラーをリダイレクトした後URLを書き換える htaccess 質問する

少し奇妙に思われるかもしれませんが、一貫性を保つために、すべての URL を次の形式で表示したいと思います。

http://example.com/page/ 

これまでのところ、通常のページは機能していますが、エラー ページは適切に機能していないようです。

ユーザーが存在しないページまたはディレクトリにアクセスした場合、ブラウザを次の場所にハードリダイレクトします。

http://example.com/404/ 

ただし、このディレクトリは実際には存在しません。エラーページの実際の場所は、

/pages/errors/404.php

また、さまざまなエラー (400、401、403、404、500) すべてに対する正確な回答は必要ありませんが、これらすべてを「適切な」URL にリダイレクトするために提供されている方法を適用します。

http://example.com/400/ 
http://example.com/500/ 

何か案は?

ベストアンサー1

.htaccess でこれを試してください:

.htaccess

ErrorDocument 404 http://example.com/404/
ErrorDocument 500 http://example.com/500/
# or map them to one error document:
# ErrorDocument 404 /pages/errors/error_redirect.php
# ErrorDocument 500 /pages/errors/error_redirect.php

RewriteEngine On
RewriteBase /

RewriteCond %{REQUEST_URI} ^/404/$
RewriteRule ^(.*)$ /pages/errors/404.php [L]

RewriteCond %{REQUEST_URI} ^/500/$
RewriteRule ^(.*)$ /pages/errors/500.php [L]

# or map them to one error document:
#RewriteCond %{REQUEST_URI} ^/404/$ [OR]
#RewriteCond %{REQUEST_URI} ^/500/$
#RewriteRule ^(.*)$ /pages/errors/error_redirect.php [L]

ErrorDocumentすべての 404 を特定の URL にリダイレクトし、すべての 500 を別の URL (自分のドメインに置き換えます) にリダイレクトします。

Rewrite ルールは、その URL を実際の 404.php スクリプトにマッピングします。必要に応じて、RewriteCond 正規表現をより汎用的にすることができますが、オーバーライドするすべての ErrorDocument コードを明示的に定義する必要があると思います。

ローカルリダイレクト:

.htaccess ErrorDocument を存在するファイルに変更します (存在しない場合はエラーが発生します)。

ErrorDocument 404 /pages/errors/404_redirect.php

404_リダイレクト

<?php
   header('Location: /404/');
   exit;
?>

エラー番号に基づいてリダイレクトする

ErrorDocumentリダイレクトしたいエラーごとに .htaccess に行を指定する必要があるようです(参照:Apache エラードキュメントそしてApache カスタム エラー)。.htaccess上記の例には複数の例が含まれています。次の例を汎用リダイレクト スクリプトとして使用し、上記の 404_redirect.php を置き換えることができます。

エラーリダイレクト.php

<?php
   $error_url = $_SERVER["REDIRECT_STATUS"] . '/';
   $error_path = $error_url . '.php';

   if ( ! file_exists($error_path)) {
      // this is the default error if a specific error page is not found
      $error_url = '404/';
   }

   header('Location: ' . $error_url);
   exit;
?>

おすすめ記事