规则不适用于现有文件

时间:2011-03-04 21:50:33

标签: .htaccess mod-rewrite redirect

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

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

信息:

  • http://sub.domain.tld - >根目录
  • http://domain.tld - > root-directory
  • 文件test.php存在于root目录中,内容为: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& data = something”。

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

我的错误是什么?是否也可以优化我的规则?

1 个答案:

答案 0 :(得分:1)

知道了!我不得不停用默认激活的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

停用它并使其正常工作!

相关问题