2016-06-12 3 views
0

私はPHPでCMSを書いていますので、ユーザーはアプリケーションを中断することなくルートフォルダの名前を変更することができます。現在、ディレクトリ固有の.htaccessファイルを使用して、カスタムエラーページのファイル処理を設定しようとしています。ErrorDocumentと.htaccess

MAMP > 
| htdocs > 
| | cms > 
| | | .htaccess 
| | | index.php 
| | | cms_files > 
| | | | info.json 
| | | | . . . 
| | | | error_pages > 
| | | | | errors.php 
| | | | | 

私は「CMS」標識さてきたフォルダを変更することができなければならないのに対し次のように私のファイルツリーは比較的です。

私の問題は、私の.htaccessファイルで、私はErrorDocument 404 /cms/cms_files/error_pages/errors.phpを使用しています。その文書のエラーコードを処理しています。正常に動作します。しかし、私が言ったように、私はErrorDocumentファイルのパスを壊さずに 'cms'の名前を変更できる必要があり、私の検索するオンラインのすべてから私は相対パスを設定することができるものを見つけるように見える.htaccessは、現在のディレクトリに関連しています。

基本的に私は、ルートフォルダをハードコーディングを避けるために

ErrorDocument 404 CURRENT_DIRECTORY/cms_files/error_pages/errors.php 

ような何かをできるようにしたいと思います。

これを行う簡単な方法はありますか?または.htaccessの代わりにphpだけを使用する別のオプションですか?前もって感謝します!

p.s. .htaccessファイルとerror_pagesフォルダは、複数のcmsインストールを作成する場合はそれぞれのディレクトリに置かなければなりません。すべてのインストール固有の情報が1つ(この場合は 'cms')のフォルダに含まれている必要があります。これは、フォルダが破損することなく名前を変更できる必要がある理由に関する別の注意点です。 Apacheのマニュアルによれば、それは単にサポートされていない相対パスのように見える

答えて

1

:(https://httpd.apache.org/docs/2.4/custom-error.html

ErrorDocumentディレクティブの構文は次のとおりです。

のErrorDocument <は3桁のコード > < アクション>

アクションは、次のように扱われます。

  1. リダイレクト先のローカルURL(「/」で始まるアクションの場合)。

  2. リダイレクト先の外部URL(アクションが有効なURLの場合)。

  3. 表示するテキストは です(上記のいずれかに該当しない場合)。テキストは引用符、それが複数の単語で構成されている場合 を( ")でラップする必要があります。

しかし、あなたがさらに下のドキュメントで読めば、それはあなたがに追加データを渡すことができますように聞こえますリダイレクトされたURL:

別のURLにリダイレクトすると便利なことがありますが、情報を渡すことができ、エラー状態をより明確に説明または記録することができます。

これを達成するために、エラーリダイレクトが送信されると、オリジナルのヘッダー名に「REDIRECT_」を付加することによって元の要求に提供されたヘッダーから生成される追加の環境変数が設定されます。これにより、エラー文書に元の要求のコンテキストが提供されます。

利用可能なすべてのリダイレクト情報については、ドキュメントを参照してください。そこに何か役に立つものがあるかもしれません。

おそらく、追加のリダイレクト情報があれば、すべての404をPHP経由で正しい404ページにリダイレクトする何らかのコントローラにリダイレクトしている可能性があります。

+1

ありがとうございます。ネイティブの方法はありませんが残念ですが、余分なファイルを作成しなければならないかもしれないと考えています。雑多なファイルを持たないことを願っていましたが、唯一のオプションは、私はそれが唯一のオプションだと思う。再度、感謝します! –

0

あなたは、サーバーのドキュメントルートでそう

のように、それは意志としてのErrorDocument 404 /404.php

場所/404.phpをのErrorDocumentするための単一のPHPファイルを使用することができますすべての404処理に使用できます。

404.phpファイルは、要求されたパスを読んでパスがサブディレクトリであるかどうかをチェックし、もしそうなら、あなたはを使用することができますは、いくつかのコンテンツを表示したり、ユーザーをリダイレクトするかをリダイレクト含まサブディレクトリの404.phpページに移動します。

<?php 
// Get the path that was requested 
$pathComponents = explode('/',$_SERVER['REQUEST_URI']); 

// The first element on the path is the directory of interest 
$baseDirRequested = $pathComponents[0]; 

// If the directory exists, either include or redirect to that 404 file 
if (is_dir($baseDirRequested)) { 
     // Include 
     include $baseDirRequested.'/404.php'; 
     // -- or -- 
     // Redirect 
     header('Location: '.$baseDirRequested.'/404.php'); 
     exit; 
} else { 
     echo 'You are really lost'; 
} 
サブディレクトリに

404.php

<?php 
// 404 for search engines 
header("HTTP/1.1 404 Not Found"); 
?> 
<!-- HTML for people --> 

含ん使用する利点は、あなたが好きなコンテンツを提供できるということです、それはおそらく、よりスムーズなユーザーエクスペリエンスです。リダイレクトを使用して、ユーザーをサブディレクトリー・ロジックに戻す方がよい場合があります。

これはテストしていませんが、調整が必要な場合があります。

関連する問題