-1

たくさんの mod_write ルールがあります

RewriteRule ^connect$ connect.php
RewriteRule ^stuff$ stuff.php
RewriteRule ^logout$ logout.php

..等々。

このアプリでは、ユーザーは独自のページを作成し、派手な URL を取得できます。

www.url.com/customnamehere

これに rewrite_rule があるとしたら、次のようになります。

RewriteRule ^customenamehere$ page.php?name=customnamehere

しかしもちろん、これらのカスタム ページのそれぞれに手動で rewrite_rule を作成するつもりはありません。なぜなら、カスタム ページが多数ある可能性があるためです。場合によっては数千になる可能性があり、非常に巨大で実行速度の遅い htaccess ファイルが作成される可能性があります。

最初の「修正された」rewrite_rulesのどれも一致しない場合、ユーザーページをロードするようにするにはどうすればよいですか? 最初にすべての通常のルールを設定し、次に他のすべてのルールの最後に次のようなルールを設定できると思いました。

RewriteRule ^(.*)$ page.php?name=$1

私は間違っていた。

これにどのようにアプローチしますか?これらすべてのカスタム名のデータベースは、Apache の外部書き換えエンジンを使用しており、何らかの形で htaccess ファイルに含まれています (これは大きなデータベースでは遅いようです)。それとも別の方法がありますか?

4

1 に答える 1

1

page.php前のルールの 1 つが適用されたときに、ルーティング先のルールが適用されないように条件を作成する必要があります。-fこれを行うには、および-dフラグをチェックします。L他のルールの最後にもフラグを配置する必要があります。

RewriteRule ^connect$ connect.php [L]
RewriteRule ^stuff$ stuff.php [L]
RewriteRule ^logout$ logout.php [L]

RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule ^(.*)$ page.php?source_url=$1

カスタム名が「.php」で終わるのはおそらく望ましくないため、必要に応じてそこでphpを確認することもできます。

RewriteCond %{REQUEST_URI} !\.php$
RewriteRule ^(.*)$ page.php?source_url=$1

-fとチェック-dはおそらくそれを行うためのより良い方法ですが。

于 2013-04-08T08:19:18.430 に答える