0

これが私の既存の .htaccess ファイルです。

 RewriteEngine On

 RewriteCond %{REQUEST_FILENAME} !-d
 RewriteCond %{REQUEST_FILENAME} !-f
 RewriteCond %{REQUEST_FILENAME} !-l
 RewriteCond {REQUEST_FILENAME} !^images

 RewriteRule ^files(.+)$ ../../fileManager/server/php/files/$1 [L]
 RewriteRule ^(.+)$ subpage.php?url=$1 [QSA,L]

あまり複雑にせずに、できる限りこれを説明しようと思います。最終的には、次のようになります。

URL のルート URL の直後に「/files」が含まれている場合 (例: http://www.someurl.com/files/username/myFile.jpg )、ユーザーを特定の URL に誘導する必要があります (この例では: ../../fileManager/server/php/files/$1)。

2 番目のルールでは、URL のルート URL の後に「/files」以外が含まれている場合、それらを「subpage.php」に誘導します。(例: http://www.someurl.com/aboutme )

これらは両方とも完全に正常に機能します。ただし、これらの両方のルールを設定すると、/ または /index.php (ルート URL: http://www.someurl.com ) にアクセスできなくなります。subpage.php にリダイレクトされ続けます。

ちょっと待って!もっとあります!

最初の RewriteRule 行を削除すると:

 RewriteRule ^files(.+)$ ../../fileManager/server/php/files/$1 [L]

...次に、2 番目の書き換えルールは、/ または /index.php に移動すると、そこに移動しますが、他の URL に移動すると、subpage.php に誘導するという点で、私が望むように機能します。

だから私が理解していないのはこれです: 両方の RewriteRules があると index.php にアクセスできないのに、2 つ目の RewriteRule しかないのはなぜですか?

さらに、これを修正する方法について誰か提案をいただけますか?

どんな情報でも大歓迎です!前もって感謝します!

4

1 に答える 1

1

RewriteConds は、次の RewriteRule にのみ適用されます。両方が存在する場合、RewriteConds は最初のものにのみ適用されます。

そこに 2 番目の RewriteRule だけがあり、最初の RewriteRule が削除されているため、ファイルである index.php のテストによってルールが適用されなくなります。

両方が存在する場合、ファイルが配置されているかどうかに関係なく、2 番目の規則がすべてに適用されます。

2 番目のルールについても RewriteConds を繰り返したいようです。

于 2013-03-14T02:30:50.477 に答える