.htaccess 规则没有';无法处理现有文件

.htaccess 规则没有';无法处理现有文件,.htaccess,mod-rewrite,redirect,.htaccess,Mod Rewrite,Redirect,我想为一个子域创建一个规则,该规则重定向到根目录上的文件。如果规则不匹配,则应将用户重定向到原始域 子域和域都链接到同一目录。但是如果给定请求URI的第一个子目录与目录中的文件名匹配,则我的规则似乎与请求URI不匹配 信息:http://sub.domain.tld -->根目录http://domain.tld -->根目录文件test.php存在于根目录中,其内容为:print\u r($\u SERVER['QUERY\u STRING']) RewriteEngine On Rewrit

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

子域和域都链接到同一目录。但是如果给定请求URI的第一个子目录与目录中的文件名匹配,则我的规则似乎与请求URI不匹配

信息:
  • http://sub.domain.tld -->根目录
  • http://domain.tld -->根目录
  • 文件test.php存在于根目录中,其内容为:print\u r($\u SERVER['QUERY\u 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]
php输出“dir=xyz&data=something”

但如果我使用,我只会得到一张空白页。但这也应该输出“dir=test&data=something”


我犯了什么错?还有可能优化我的规则吗?

明白了!我不得不停用默认激活的MultiView。“多视图”用于调用不带扩展名的文件。因此,将被重写为file.EXT(文件以其扩展名存储在服务器上)

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

示例:test.php是一个有效文件。-->请求uri:/test.php/something

添加到您的htaccess文件:

Options -MultiViews

停用它并使其工作

第三条规则应该在那里吗?(RewriteRule^test/…)是的,我试图捕获请求uri中的文件名,因为第二个RewriteRule不匹配。但这是我为解决这个问题而添加的第一条重写规则,仍然没有成功…属于serverfault。这不是一个编程问题,所以这里不讨论这个问题。