1

そのため、最近mod_rewriteに関連する問題を扱っていますが、そのようなことをしようとしている人はいないようです。人々が持っているすべての質問は、他のディレクトリと同じようにディレクトリを含めたいときに、ディレクトリを書き換えから除外しようとすることです。

たとえば、.htaccessファイルを含むルートディレクトリを想定すると、www.example.com/root/

などの作成されたディレクトリを入力すると、ブラウザのアドレスバーにあるものを変更せずwww.example.com/root/asdfasdfにリダイレクトするように.htaccessファイルが設定されますwww.example.com/root/index.php?url=asdfasdf

ただし、などの実際のディレクトリで同じことを行おうとするとwww.example.com/root/admin、アドレスバーのURLが変更されるだけでなく、に変更されwww.example.com/root/admin/?url=adminます。

誰かが私に何が起こっているのか説明できますか?私はあらゆる種類の異なる正規表現とフラグを試しましたが、何かをリダイレクトするものでも同じ問題が発生します。www.example.com/root/adminクエリ文字列がであることが非表示になっているときに、ルートフォルダに移動してリダイレクトすることはできますか?url=admin

[更新:追加情報2012年11月30日]

私が言ったように、リダイレクトが完全に失敗して500エラーが発生するだけではないと仮定すると、複数の異なるコード行が表示され、まったく同じリダイレクトの問題が発生することを試しました。ただし、これが私の最新の反復の1つであり、これにより、ディレクトリを無視しないという問題が発生しました。

RewriteEngine On
RewriteBase /root/

RewriteCond %{REQUEST_FILENAME} !^(.\*\\.("png"|"jpg"|"gif") [NC]
RewriteRule (.\*?) index.php?url=$1 [QSA]

書き換え条件は、画像が要求されている場合にエンジンが書き換えられないようにすることです(cssおよびimgタグの場合)。その行を削除しようとしましたが、違いがなかったため、以前は言及しませんでした。

ただし、私はmod_rewriteのマスターではありません。そのため、私が書いたものにエラーが表示された場合は、遠慮なくお知らせください。

4

1 に答える 1

0

あなたが何をしようとしているのかはあなたの質問から完全には明らかではなく、あなたの.htaccessファイルが実際にどのように見えるかを見るのは役に立ちました。ただし、ルートフォルダの.htaccessファイルには次の行があります。

RewriteCond %{REQUEST_URI} !^/root/index\.php
RewriteRule (.*) /root/index.php?url=$1 [L]

に行われたリクエストをサイレントにリダイレクトし、実際のフォルダに対しても同じことを行いますhttp://www.example.com/root/madeupfolder/madeupfile.phphttp://www.example.com/root/index.php?url=madeupfolder/madeupfile.phpしたがって、フォルダadminがrootの下に存在する場合、へのリクエストhttp://www.example.com/root/adminはサイレントにリダイレクトされますhttp://www.example.com/root/index.php?url=admin

ただし、実際に存在するフォルダーとファイルを提供したいが、存在しないフォルダーとファイルのリライト要求がある場合は、そのようにリライトを調整する必要があります。

RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteCond %{REQUEST_URI} !^/root/index\.php
RewriteRule (.*) /root/index.php?url=$1 [R=301]

これにより、に対して行われたリクエストは引き続き書き換えhttp://www.example.com/root/madeupfolder/madeupfile.phpられますhttp://www.example.com/root/index.php?url=madeupfolder/madeupfile.phpが、に対して行われたリクエストなどの実際のフォルダやファイルの場合はhttp://www.example.com/root/admin、adminフォルダが提供されます。

これがお役に立てば幸いですが、質問を少し明確にしていただければ、もう一度お役に立てれば幸いです。

于 2012-11-30T10:41:06.377 に答える