我有一个共享主机,我想在其中托管多个网站。为此,为了清楚起见,我已将主域(即www.mydomain.com)重定向到文件夹(即/mydomain.com/)。但是,我想阻止从URL中直接访问此文件夹(www.mydomain.com/mydomain.com/),并出现404错误(未找到)。
这是根目录中的.htaccess:
RewriteEngine On
RewriteBase /
RewriteCond %{HTTP_HOST} ^(www.)?mydomain.com$ [NC]
RewriteCond %{REQUEST_URI} !^/mydomain.com/0.1/$ [NC]
RewriteRule ^(.*)$ /mydomain.com/0.1/$1
RewriteCond %{HTTP_HOST} ^(www.)?mydomain.com$ [NC]
RewriteRule ^(/)?$ mydomain.com/0.1/index.php [L]
RewriteCond %{THE_REQUEST}% ^[A-Z]{3,9}\ /mydomain\.com/ [NC]
RewriteRule . - [R=404,L]
这是/ mydomain中的.htaccess /,包含一系列适用于漂亮和整洁网址的规则。
RewriteEngine On
RewriteRule ^about/(.+) index.php?a=about&b=$1
RewriteRule ^services/(.+) index.php?a=services&b=$1
现在结果是这样:
访问www.mydomain.com会显示/ mydomain /中的内容。但是,还会显示www.mydomain.com/mydomain/,忽略404规则,并创建另一个文件夹 - 无论名称如何 - 如果没有htaccess,则会抛出404。
我已经处理了这个问题5天了,并尝试了一切。此时我不知道错误是来自根.htaccess还是文件夹的。
提前致谢。
PS:为了清楚起见,我无法控制httpd.conf文件。
注意:
答案 0 :(得分:0)
重写规则中的R
标志应该在301到399之间,所以它不能是404!
你的规则应该如下:
RewriteCond %{THE_REQUEST} ^/mydomain\.com/? [NC]
RewriteRule (.*) throw_404.php [L]
创建throw_404.php
并发送404状态代码!并在您的第一条规则中添加L
标志,以避免该规则与我的规则发生冲突!