我有一堆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文件。 / p>
这让我遇到了障碍:如何使它如果没有匹配的初始'固定'rewrite_rules,那么加载用户页面?我想也许我可以在开始时拥有所有常规规则,然后在所有其他规则结束时,例如:
RewriteRule ^(.*)$ page.php?name=$1
我错了。
你会怎么做?使用apach外部重写引擎的所有这些自定义名称的数据库,然后以某种方式包含在htaccess文件中(这对于大型db来说似乎很慢)?或者还有另一种方式吗?
答案 0 :(得分: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
虽然-f
和-d
检查可能是更好的方法。