Apache 如何处理这种不断变化的mod_重写规则?
我有一系列的修改规则Apache 如何处理这种不断变化的mod_重写规则?,apache,.htaccess,mod-rewrite,Apache,.htaccess,Mod Rewrite,我有一系列的修改规则 RewriteRule ^connect$ connect.php RewriteRule ^stuff$ stuff.php RewriteRule ^logout$ logout.php …等等 在此应用程序中,用户可以创建自己的页面并获得一个奇特的url,例如: www.url.com/customnamehere 如果我对此有一个重写规则,它将类似于: RewriteRule ^customenamehere$ page.php?name=customnameh
RewriteRule ^connect$ connect.php
RewriteRule ^stuff$ stuff.php
RewriteRule ^logout$ logout.php
…等等
在此应用程序中,用户可以创建自己的页面并获得一个奇特的url,例如:
www.url.com/customnamehere
如果我对此有一个重写规则,它将类似于:
RewriteRule ^customenamehere$ page.php?name=customnamehere
RewriteRule ^(.*)$ page.php?name=$1
但当然,我不会为每个自定义页面手动创建重写规则,因为它们可能有很多。。可能有数千个,这将形成一个非常庞大且执行速度缓慢的htaccess文件
这就给我带来了我的障碍:如何让它在初始的“固定”重写规则都不匹配的情况下加载用户页面?我想也许我可以在一开始就有我所有的常规规则,然后在所有其他规则的末尾,比如:
RewriteRule ^customenamehere$ page.php?name=customnamehere
RewriteRule ^(.*)$ page.php?name=$1
我错了
你将如何处理这个问题?使用apaches外部重写引擎创建所有这些自定义名称的数据库,然后以某种方式将其包含到htaccess文件中(对于大型数据库来说,这似乎很慢)?或者还有其他方法吗?您需要创建一个条件,以便路由到
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”结尾:
虽然
-f
和-d
检查可能是一种更好的方法。是否可以使用重写条件来检查PHP以及-f和-d检查?它工作了!非常感谢。