2011-03-04 45 views
0

我想为一个子域创建一个规则,该子域会重定向到根目录中的文件。如果规则不匹配,则应将用户重定向到原始域。规则不适用于现有文件

这两个子域和域链接到同一目录。但是,如果给定REQUEST_URI的第一个子目录与目录中的文件名匹配,那么我的规则似乎不匹配REQUEST_URI。

信息:

  • HTTP://sub.domain.tld - >根目录
  • HTTP://domain.tld - >根目录
  • 文件test.php的存在于根 - 包含内容的目录:print_r($ _ SERVER ['QUERY_STRING']);

RewriteEngine On 
RewriteBase/

RewriteCond %{HTTP_HOST} ^sub\. [NC] 
RewriteCond %{REQUEST_URI} ^/([a-z]+)/ [NC] 
RewriteRule ^test/ http://domain.tld/ [L,R=301] 
RewriteRule ^([a-z]+)/(.*)$ test.php?dir=$1&data=$2 [L] 

随着http://sub.domain.tld/xyz/something的test.php的输出 “DIR = XYZ &数据=东西”。

但是,如果我使用http://sub.domain.tld/test/something我只得到一个空白页。但是这也应该输出“dir = test & data = something”。

我的错误是什么?是否有可能优化我的规则?

+0

是应该在那里的第三条规则? (RewriteRule^test/... – yoavmatchulsky 2011-03-04 21:56:52

+0

是的,我试图抓住request_uri中的文件名,因为第二个RewriteRule不匹配。但它是我为解决问题而添加的第一个RewriteRule,仍然没有成功... – 2011-03-04 21:58:55

+0

属于serverfault。这不是一个编程问题,所以它在这里是无关紧要的。 – 2011-03-04 22:00:13

回答

1

Got it!我必须停用默认激活的MultiView。 MultiView对于调用没有扩展名的文件很有用。因此http://domain.tld/file被重写为file.EXT(文件存储在服务器上的扩展名)。

如果我调用存储在服务器上的文件,我的服务器将REQUEST_URI修改为/file.EXT/subdir/subfile.html。

例如:test.php是一个有效的文件。 http://domain.tld/test/something - > REQUEST_URI:/test.php/something

添加到您的htaccess文件:

Options -MultiViews 

停用它,得到它的工作!