我想为一个子域创建一个规则,该子域重定向到根目录下的文件。如果规则不匹配,则应将用户重定向到原始域。
两者,子域和域链接到同一目录。但是如果给定REQUEST_URI的第一个子目录与目录中的文件名匹配,那么我的规则似乎与REQUEST_URI不匹配。
信息:
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”。
我的错误是什么?是否也可以优化我的规则?
答案 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
停用它并使其正常工作!