针对不同文件夹

时间:2018-01-30 08:58:25

标签: apache .htaccess redirect mod-rewrite

我需要通过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

1 个答案:

答案 0 :(得分:0)

好像我几个小时后找到了答案。

RewriteRule ^test(.*)$ test-folder/test.php?param=$1 [L,NC,QSA]
RewriteRule ^(.*)$ main.php?param=$1 [L,NC,QSA]