0

この .htaccess をルート フォルダーに配置しました。

<IfModule mod_rewrite.c>
    RewriteEngine on
    RewriteRule   (.*) public/$1    [L]
 </IfModule>

説明のない 500 内部サーバー エラーが発生します。

括弧を削除すると機能します:

<IfModule mod_rewrite.c>
    RewriteEngine on
    RewriteRule   .* public/$1    [L]
 </IfModule>

なんで?ここで括弧は中立であるべきではありませんか?

最新の XAMPP バージョン (Windows) を使用しています。

4

3 に答える 3

1

正規表現グループは丸括弧で囲まれています。この場合、式.*はすべてに一致するため、ルールが常に使用されます。

括弧内の式では、グループ 1: への後方参照public/WhateverIsInsideParenthesisであるため、ルールは にマップされます。この場合唯一のものです。$1(.*)

括弧public/がないと、グループがないため、ルールは にのみマップされます。括弧内には何もありません。

リクエストの例は示していませんが、次のようなものです。

http://example.com/folder1/folder2/script1/括弧内の URI パスは次のようにfolder1/folder2/script1/なり、置換 URLは次のようになります。

http://example.com/public/folder1/folder2/script1/

したがって、この場合、括弧の有無にかかわらず、エラーにはいくつかの理由があります。ルールがマッピングされているリクエスト、ループなど、すべてがそのエラーを生成する可能性があります。500 内部サーバー エラーは、問題が発生した場合に一般的HTTP status codeに使用されます。

于 2013-04-16T05:34:13.503 に答える
0

はい、かっこはpatternに対して中立です。

ただし、置換でキャプチャされた文字列を として使用すると、違いが生じます$1。次に、ルールは次のいずれかと同等です

RewriteRule (.*) public/$1

また

RewriteRule .* public/

括弧を省略して置き換える$1$0

RewriteRule .* public/$0

次に、同じエラーが再び発生しますが、今回は括弧なしです。

于 2013-04-16T06:40:34.893 に答える