5

mysql_databaseに多数のユーザーが格納されているWebサイトをプログラミングしています。各ユーザーは、他のフィールドの中でもIDとプロファイル名(jim.button.1など)を持っています。次の構造を持つURL(たとえば、userIDのmysql_selectを介してプロファイルを取得する)が必要です:www.mysite.com/jim.button.1

これで、mod_rewrite_ruleを使用してそれを実行できることがわかりましたが、数千人のユーザーを使用すると、非常に大きな.htaccessファイルを取得します。ちなみに、私はmod rewriteの専門家ではありませんが、それがどのように機能するかは理解しています。

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

すべての助けを歓迎します。

4

3 に答える 3

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>

次に、 経由で実際の URL を取得します$_SERVER['REQUEST_URI']。次に例を示します。

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

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

于 2012-10-12T19:32:24.907 に答える
1

次のようなものを使用できます。

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

users.php では、次のようにユーザーを取得できます。

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

サイトの残りの部分と統合するには、これを微調整する必要がありますが、アイデアは得られます。

于 2012-10-12T19:30:37.490 に答える
1

Ross Smith と JvdBerg の両方を組み合わせると、次のようになります。

<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>

これにより、URL 全体を解析するよりも、スクリプトでの処理が容易になります。をオンにした後の最初の 4 行RewriteEngineは、サイトの残りの部分が引き続き動作できるようにするために必要です (ディレクトリ、ファイル、リンクをチェックします)。URL が 1 つである場合は、最初のルールを使用し、それ以上処理しません。そして、2 番目のルールは、前のルールの 1 つではなく、get として「profile.php」ページにリダイレクトする場合です。

次に、「profile.php」ページで、値を次のように取得できます。

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

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

于 2012-10-14T21:59:23.717 に答える