我正在尝试将所有请求路径重写为我的启动文件。像这样:
RewriteRule .* framework/init.php
除了,在这个框架中,有一些目录可以提供文件,而无需 PHP 处理请求。但是,我不想使用这些目录的实际路径,因为我希望能够让 PHP 路由器解释这些路径。因此,我想为这些目录设置别名。例如:
RewriteRule ^i/com/(\w+)/(.*)$ framework/components/$1/images/$2
现在的问题是,这两个重写规则都是单独工作的,但是当我尝试将它们结合起来时,事情就出错了。在别名重写发生后,它似乎重新评估了我的整个 .htaccess。以下是我尝试过的一些示例:
在某些条件下跳过 rewrite-everything 行:
rewriteRule ^i - [S=1]
RewriteRule .* framework/init.php
RewriteRule ^i/com/(\w+)/(.*)$ framework/components/$1/images/$2
不工作。看起来第二行被跳过了,然后第三行重写为第二行没有被跳过的条件,所以第二行执行。
使用独占 rewrite-everything 行:
RewriteRule (?!i).* framework/init.php
RewriteRule ^i/com/(\w+)/(.*)$ framework/components/$1/images/$2
相同的故事。
在异常行之后停止重写引擎:
RewriteRule ^i/com/(\w+)/(.*)$ framework/components/$1/images/$2 [L]
RewriteRule .* framework/init.php
不工作。
添加重写条件:
RewriteCond %{REQUEST_URI} ^(?!i)
RewriteRule .* framework/init.php
RewriteRule ^i/com/(\w+)/(.*)$ framework/components/$1/images/$2
请注意,当我删除两个 RewriteRules 之一时,上述所有示例都开始工作。我一直在寻找类似的问题,但他们都有我试图应用的解决方案。他们的问题和我的问题之间的一个区别是,我想将我的“特殊”目录重写为一个目录,当正常请求时,该目录会导致重写 init.php。谁能告诉我这是否可能,如果是的话,我错过了什么或没有得到什么?