51

少し奇妙に思えるかもしれませんが、一貫性を保つために、すべての URL を次の形式で表示したいと思います: http://domain.com/page/これまでのところ、通常のページは機能していますが、できません。エラーページが正しく機能しているようです。

ユーザーが存在しないページまたはディレクトリにアクセスした場合、ブラウザにhttp://domain.com/404/にハード リダイレクトしてもらいたいのですが、このディレクトリは実際には存在しません。エラーページの実際の場所は /pages/errors/404.php の下になります

また、さまざまなエラー (400、401、403、404、500) のすべてに対する正確な回答は必要ありませんが、これらすべてを「適切な」URL にリダイレクトするために与えられた方法を適用します (例: http ://domain.com/400/ http://domain.com/500/など)

何か案は?

4

4 に答える 4

86

.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_redirect.php

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

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

ErrorDocumentリダイレクトするエラーごとに .htaccess に行を指定する必要があるようです(参照: Apache ErrorDocumentおよびApache Custom Error )。上記の.htaccessの例には、複数の例が含まれています。上記の 404_redirect.php を置き換える汎用リダイレクト スクリプトとして以下を使用できます。

error_redirect.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;
?>
于 2013-11-13T19:45:42.403 に答える
24

このコードを.htaccessファイルに入れます

RewriteEngine On
ErrorDocument 404 /404.php

はどこに404.phpあり、ルートfile nameに配置されます。あなたはここに置くことができます。full path

于 2014-09-24T11:12:06.693 に答える
6

このルールをhtaccessの先頭に追加してみてください:

RewriteEngine On
RewriteRule ^404/?$ /pages/errors/404.php [L]

次に、その下(または他のルール):

RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteCond %{REQUEST_FILENAME} !-l
RewriteRule ^ http://domain.com/404/ [L,R]
于 2013-11-13T19:46:30.797 に答える