我需要通过htaccess对我的页面进行双层重定向。 首先,我为" base"提供了干净的URL功能。页面,专门将任何URL重定向到单个前端控制器脚本" main.php"。
此处,"基础域"之后的任何内容将作为变量传递给主脚本,然后可以对其进行操作。
例如,domain.com/a/b
会重定向到domain.com/main.php$param=a/b
使用以下.htaccess代码可以正常工作:
<IfModule mod_rewrite.c>
RewriteEngine On
RewriteBase /
RewriteCond %{REQUEST_FILENAME} !-f
RewriteRule ^(.*)$ main.php?param=$1
</IfModule>
现在丢失的部分:我希望有一个具有不同脚本/功能/布局等的ACTUAL文件夹。不得通过上面的main.php脚本访问此脚本。为了这个例子,让我们调用这个文件夹test-folder
。
我想要/需要的行为是,在域部分之后以test
的所有URL以相同的方式转发到不同的脚本。总计:
domain.com
=&gt; domain.com/main.php
和
domain.com/a/b
=&gt; domain.com/main.php?param=a/b
BUT
domain.com/test
=&gt; domain.com/test-folder/test.php
随后
domain.com/test/a/b
=&gt; domain.com/test-folder/test.php?param=a/b
现在我尝试了不同的重写规则组合,例如
RewriteCond %{REQUEST_FILENAME} !-f
RewriteRule ^test/(.*)$ test-folder/test.php?param=$1 [L,NC]
RewriteRule ^(.*)$ main.php?param=$1 [L,NC]
这给了我一个场景,其中所有内容都被重定向到基本URL的main.php脚本,没有参数可用。一文不值。接下来,我试过了:
RewriteCond %{REQUEST_FILENAME} !-f
RewriteRule ^test/(.*)$ test-folder/test.php?param=$1 [L,NC]
这适用于测试文件夹,但不适用于主文件夹(duh!)。所以我试过了:
RewriteCond %{REQUEST_FILENAME} !-f
RewriteRule ^(.*)$ main.php?param=$1 [L,NC]
这使得对基本域的所有请求都能正常工作,但所有要测试的请求也会被重定向到主脚本。杜啊。尽管如此,这两条规则都是按预期方式单独工作的。
如何让两个规则在组合中工作?
提前致谢!
PS:以下是应该如何匹配的示例:
domain.com/ => domain.com/main.php?param=
domain.com/a => domain.com/main.php?param=a
domain.com/a/b/c/more => domain.com/main.php?param=a/b/c/more
domain.com/test/ => domain.com/test/test.php?param=
domain.com/test/a => domain.com/test/test.php?param=a
domain.com/test/a/b/c/more => domain.com/test/test.php?param=a/b/c/more
答案 0 :(得分:0)
好像我几个小时后找到了答案。
RewriteRule ^test(.*)$ test-folder/test.php?param=$1 [L,NC,QSA]
RewriteRule ^(.*)$ main.php?param=$1 [L,NC,QSA]