-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

我错了。

你会如何处理这个问题?使用 apaches 外部重写引擎的所有这些自定义名称的数据库,然后以某种方式包含到 htaccess 文件中(这对于大型数据库来说似乎很慢)?还是有其他方法?

4

1 回答 1

1

您需要创建一个条件,以便在page.php应用之前的规则之一时不会应用路由到的规则。您可以通过检查-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

尽管-fand-d检查可能是更好的方法。

于 2013-04-08T08:19:18.430 回答