2016-10-30 8 views
0

私は自分のローカルPCでxamppを使用しています。 .htaccessファイルは/test/フォルダに置かれます。私は、アドレスlocalhost/testをクロムブラウザでテストしています。.htaccess - 動作を理解するのに役立ちます

.htaccessファイルはこれです:

RewriteEngine On 
RewriteRule . http://google.com 

これは、Googleにリダイレクトします。これと同じ

RewriteEngine On 
RewriteRule .. http://google.com 

3ドット、4ドット、5ドット、6ドット、7ドット、8ドット、9ドットと同じです。

しかし、10ドット以上のリダイレクトがある場合は動作しません。これはリダイレクト(10ドット)をしません

RewriteEngine On 
RewriteRule .......... http://google.com 

このような.htaccessファイルで実際にドットはどういう意味ですか?彼らは正規表現ですか? 10のマジックナンバーは何ですか?

編集 私はおそらく原因を発見しました。 localhost/testのアドレスで開かれているファイルはindex.phpです。このファイル名の長さは実際には9文字です。

9個以下のドットは一致しますが、10個のドットは一致しません。私はこれが答えだと思う。

edit2 ドットにはまだ何か魔法があります。今私はtest2の空のディレクトリに.htaccessファイルを置き、localhost/test2のアドレスをテストし始めました。

リダイレクトは13ドットまで発生します。 14ドット以上の場合、リダイレクトはありません。混乱する。 Apacheのドキュメント(https://httpd.apache.org/docs/current/mod/mod_rewrite.html#rewriterule)によれば

答えて

0

私はapacheエラーログファイル内でanswearを見つけました。この正規表現のドットパターンは、ディレクトリに.htaccessファイルしかない場合でも、デフォルトのファイル名と一致します。私の構成では、デフォルトのファイル名があること:

index.php 
index.pl 
index.cgi 
index.asp 
index.shtml 
index.html 
index.htm 
default.php 
default.pl 
default.cgi 
default.asp 
default.shtml 

マッチングは(13個のドットなど)だけで13文字を持っているdefault.shtmlファイル名で終了します。実際にはdefault.shtmlファイルがディレクトリに存在しません。その後、リダイレクトが開始されます。

0

RewriteRule

の構文はPatternであるRewriteRule Pattern Substitution [flags]、ある "Perl互換正規表現。"これはあなたが観察した行動を説明するでしょう!

1

あなたは標準のPCREを扱っています。ドットは魔法ではなく、それぞれが「任意の文字にマッチする」ことを意味します。

RewriteRule .+ https://www.google.com/search?q=$0 [B,L,R] 

の操作を行います。これは、パスコンポーネントで13個の文字に一致する必要があり、Googleがリダイレクトのための(カレントディレクトリの末尾にスラッシュの後にすべてのもの)ではなく、14はそれが実際に一致する何を参照するには、このルールでそれを交換してみてください以前のルールではLフラグが指定されていません。このフラグはエンジンに一致の検索を停止するように指示していますか?

+0

私はapacheのエラーログファイルでanswearを見つけました。この正規表現のドットパターンは、ディレクトリに.htaccessしかない場合でも、index.php、index.pl、index.cgi、index.aspなどのいくつかのデフォルトファイル名と照合されます。そのファイル名の1つが13文字の場合、リダイレクトが開始されます。お返事ありがとうございます。 – trzczy

+0

"ありがとう"ではなく、有益な回答のためにアップヴォートを使用してください。 – Walf

+0

私はそれが実際に一致しているかどうかを確認するあなたの方法が好きですが、実際には私の回答は唯一の良い答えです。とにかくありがとうとポイント。 – trzczy

関連する問題