2016-07-09 3 views
0

すべてのエラーに対してカスタムエラーページを使用したいので、エラーページでビルドされたサーバーがビジターに表示されることはありません。しかし、私は克服できない不具合を発見したようです。htaccessが動作していません。入力したURLにスラッシュスペースが含まれていると、失敗します。 "site.com/ /"

問題は、訪問者が2つのスラッシュの間だけにスペースを入れてURLをミスした場合、私の環境は自分のルートフォルダのhtaccessファイルを完全に無視して、ユーザーを組み込みのエラーページに送ります。

開発環境は、それは私が今、このhtaccessのファイルを使用していたルートだと、問題を単純化するためのApacheなどの最新のPHP &

でWindows 10上でXAMPPです。

ErrorDocument 404 /statuspage.php 
RewriteEngine On 
RewriteRule^http://example.com [R=302,L] 

上記のコードでは、すべてのURLをexample.comにリダイレクトする必要があります。それが見つからないページで失敗する場合、少なくとも私のエラーページにリダイレクトする必要があります。

しかし、次のURLのいずれかを入力すると、私のプロジェクト全体がHTACCESSファイルを含めて無視され、XAMPP自身の404エラーページがスローされます。

1)www.mysite.com//

2)www.mysite.com/

3)www.mysite.com/dir/%20/subdir/file /file.php。 html

Apacheはスペースを%20で置き換えます。私のリダイレクトを無視します。それ自身の404ページを表示します。

私は、このエラーはちょうどうまくリダイレ​​クトされることに注意してください。

1)www.mysite.com/ file.php/ 2)www.mysite.com/dir/ X/file.html

私はこのエラーは一般的ではない実現します。しかし、それが起こる可能性があり、私は何が起こっているのか、それをやめる方法を理解するのに苦労しています。

+1

IMHOあなたは、ApacheルータではなくあなたのURLルータにロジックを移すことができます。これにより、他のプラットフォームにもコードをデプロイできます。 –

+0

私はそのようなことがどれほど無知であるかを説明できなかったでしょう。私はあなたがURLルータによって何を意味するか分かりません。あなたはhttpd.confやその他の設定ファイルについて話していますか?私の懸念があるなら、私はいくつかのホスティング環境でそのファイルにアクセスできないかもしれないということです。それがあなたの意図したものでないなら、私はそれをよりよく理解したいと思います。ありがとう。 –

+1

Hmm。あなたはApacheの設定をそのままにして、PHPで大文字小文字を扱います。通常は、パスを考慮したファイルがあります。何かが好きです:* pathが "/ something"の場合、function_something()*を呼び出します。 [ここに](http://stackoverflow.com/questions/125677/php-application-url-routing)いくつかの情報は、あなたを開始する。 –

答えて

0

を、これは私の開発環境に固有の問題のようです。

私のエラーログにエラーID AH00127が表示されました。私がグーグルでAH00127を見つけたとき、すべての単一の投稿に特定の設定が含まれていました。

configsの仮想ホストを使用しているWindowsのXAMPP。 I.

<Virtualhost *:80> 

私はライブで見ることはありませんので、この問題は無視できます。

レスポンダーに感謝します。

0

ディレクティブがErrorDocumentより前に実行されるためです。ルールはすべてのリクエスト(404を含む)をhttp://example.comにリダイレクトします。これを解決するには、あなたが/statuspage.phpに見つからない要求をリダイレクトする代わりにErrorDocumentRewriteRuleを使用する必要があり、これを使用してErrorDocumentを置き換えます。いくつかの研究の後

RewriteEngine on 
RewriteCond %{REQUEST_FILENAME} !-d 
RewriteCond %{REQUEST_FILENAME} !-f 
RewriteRule^/statuspage.php [L] 
+0

返事をありがとうが、私はそれを試してみました。 www.mysite.com/ /は依然として組み込みの404文書を参照しています。あなたが言ったように、それは/statuspage.phpに間違ったURLをリダイレクトすべきですが、URLに "/ /"が含まれていると失敗します。私の例では、RewriteRule^http://example.com [R = 302、L]をテストとして使用していました。すべてのリクエストをリダイレクトする必要がありますが、URLにスラッシュスペースが含まれていれば失敗します。あなたの答えはうまくいくはずです。しかし、それはしません。 –

関連する問題