Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/apache/8.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/.htaccess/6.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Apache 如何处理这种不断变化的mod_重写规则?_Apache_.htaccess_Mod Rewrite - Fatal编程技术网

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检查?它工作了!非常感谢。