2011-06-17 7 views
0

I持つサイトディレクトリ内の.htaccessファイルに次の行:.htaccessファイルを編集する際のURLとディレクトリの一致の問題を回避するにはどうすればよいですか?

RewriteEngine On 
RewriteRule ^([a-z]{1}[a-z0-9_-]{3,20})$ account.php?username=$1&%{QUERY_STRING} 

それは例えばURLを受信した場合:

http://localhost/samplesite/johnsmith 

それは

http://localhost/samplesite/account.php?username=johnsmith 
にそれを書き換えます

これは問題ありません。

サイトディレクトリにjohnsmithという名前のディレクトリがある場合、問題が発生します。

http://localhost/samplesite/johnsmith/?username=johnsmith 

と書き換えて表示します。私はすべてのユーザーのアカウントページ機能を実装しようとしていますが、ユーザーがルートにいくつかのディレクトリのようなユーザー名を登録したい場合、その機能は中断しますか?要求されたURLが既存のディレクトリまたはファイルを表すかどうかを確認するために書き換え条件を追加しようとしました。

RewriteCond %{REQUEST_FILENAME} !-d 
RewriteCond %{REQUEST_FILENAME} !-f 

しかし、私はどのように処理するのか分かりません。

アカウントページの機能をユーザーに提供する方法がわかっている場合は、その点についてアドバイスをいただければ幸いです。

誰でもこのケースを解決するのに手伝ってもらえますか?ありがとうございました!

答えて

0

RewriteCondは、正しい場所にある場合に機能します。また、あなたが%{QUERY_STRING}を必要としない

RewriteEngine On 
RewriteCond %{REQUEST_FILENAME} !-d 
RewriteCond %{REQUEST_FILENAME} !-f 
# ---------------------------------------------------------------See info below-- 
RewriteRule ^([a-z]{1}[a-z0-9_-]{3,20})$ account.php?username=$1&%{QUERY_STRING} 

:あなたの完全な.htaccessファイルは次のようになります。代わりに、あなたは...クエリ文字列の残りの部分を追加する

RewriteRule ^([a-z]{1}[a-z0-9_-]{3,20})$ account.php?username=$1 [L,QSA] 
+0

QSAフラグを使用する必要がありますはい、最後に.htaccessファイルでの私の行は、あなたのコードのように見えます。しかし、問題はまだ解決されていません。私は同じディレクトリとユーザー名が利用可能な場合、それを解決する方法?または、この問題のある状況に対して、より良い解決策がありますか? – forbdn

+0

私の質問に対する最初の答えは問題を解決しませんでした!誰もが問題を防ぐ方法を知っていますか?これは、ディレクトリとアカウントのユーザー名の一致する名前にあります。機能は、Facebookのものと似ています。たとえば、http://www.facebook.com/johnsmith/と同じことをしたいと思います。私はあなたの助けに大変感謝しています! – forbdn

+1

@forbdn私はあなたが.htaccessでこれを解決できるとは思わない。代わりに、レコードが存在するかどうかを確認するためにデータベースをチェックするために、すべてのリクエストが 'index.php'に最初に移動しなければなりません。もしそうでなければ、PHPはディレクトリが存在するかどうかをチェックしなければなりません。 –

関連する問題