2012-10-12 11 views
5

私は多くのユーザがmysql_databaseに格納されており、各ユーザはIDとprofilename(jim.button.1など)を持っています。 www.mysite.com/jim.button.1mod-rewriteで何千ものURLを作成しています

は、今私は、私はmod_rewrite_ruleでそれを行うことができることを知っている:私はこのような構造を持っている(ユーザーIDに例えばmysql_selectてプロファイルがあります取得)URLをしたいですしかし、何千ものユーザーがいると、非常に大きな.htaccessファイルを取得します。私はモッドリライトの専門家ではありませんが、どのように動作するのか理解しています。

これを行う方法はありますか?たとえば、1つまたは2つのmod_rewrite_rulesでこれを行う方法がありますか?

すべての援助を歓迎します。あなたはこれでそれが統合され得るために微調整をする必要が

$user = $_GET['user']; 
// do your stuff with the user 

:あなたのusers.phpで

RewriteEngine On 
RewriteRule ^(.+)$ users.php?user=$1 [QSA,L] 

あなたは、このようなユーザーを取得することができます:

答えて

1

あなたはこのようなものを使用することができますあなたのサイトの残りの部分は、あなたが考えを得る。

+0

なぜ投票が下りましたか?それは私の連続したダウン投票者ですか? – JvdBerg

+0

あなたの答えは私にとっては良さそうです。私はupvoted。 –

+0

書き換えルールはすべての*リクエストと一致するので、実際のファイル( '.css'、' .js'、 '.jpg'など)は配信されません。おそらく、OPが望んでいるものではないでしょう。 –

2

あなたは使用して、既存のファイルにマップされないすべてのURLを書き換えることができます:

<IfModule mod_rewrite.c> 
    RewriteEngine On 
    RewriteCond %{REQUEST_FILENAME} -s [OR] 
    RewriteCond %{REQUEST_FILENAME} -l [OR] 
    RewriteCond %{REQUEST_FILENAME} -d 
    RewriteRule ^.*$ - [NC,L] 
    RewriteRule ^.*$ index.php [NC,L] 
</IfModule> 

が続い $_SERVER['REQUEST_URI']を経由して実際のURLをつかみます。ここに例があります:

$parts = parse_url($_SERVER['REQUEST_URI']); 
$user = $parts['path']; 

例としてはhttps://github.com/zendframework/ZendSkeletonApplication/blob/master/public/.htaccessを参照してください。

1

あなたのようなもので終わると思いますので、私はロススミスとJvdBergの両方を組み合わせることになります。それは簡単ではなくURL全体を解析することよりも、あなたのスクリプトで処理することになるだろう

<IfModule mod_rewrite.c> 
    RewriteEngine On 
    RewriteCond %{REQUEST_FILENAME} -s [OR] 
    RewriteCond %{REQUEST_FILENAME} -l [OR] 
    RewriteCond %{REQUEST_FILENAME} -d 
    RewriteRule ^.*$ - [NC,L] 
    RewriteRule ^(.*)$ profile.php?user=$1 [NC,L] 
</IfModule> 

RewriteEngineをオンにした後の最初の4行は、サイトの残りの部分(ディレクトリ、ファイル、リンクのチェック)を継続して実行できるようにするために必要で、URLが最初のルールを使用し、そして、第2のルールは、あなたの 'profile.php'ページへのアクセスとして前のリダイレクトとリダイレクトのいずれかでない場合です。

は、その後、あなたの 'profile.php' のページに、あなたはあなたのような値を取得することができます:

list($fname, $lname, $id) = explode('.', $_REQUEST['user']); 

そして、そこから行きます。

+0

また、ルールを後で追加する予定がある場合は、できるだけ具体的に 'RewriteRule'で指定する必要があります。したがって、RewriteRule([a-zA-Z] +)\。([a-zA-Z] +)\に 'RewriteRule ^(。*)$ profile.php?user = $ 1 [NC、L] $ _REQUEST ['fname'] '、' $ _REQUEST ['lname']を介してそれらにアクセスすることにより、([0-9] +)$ profile.php?fname = $ 1&lname = $ 2&uid = $ 3 [NC、L] '、' $ _REQUEST ['uid'] 'を実行します。また、そのフォーマットが期待どおりであることを保証し、あなたのPHPに期待している文字セットを持つようにURIを制限します。 – Jon

+0

最後に私はこれを実装する時間があり、あなたの答えは非常にuselfullです!ありがとうございました。 – Rob

+0

なぜdownvote?あなたが何かをdownvoteしようとしている場合は、少なくとも理由についてのコメントを残してください。 – Jon

関連する問題