.htaccess域重定向到文件夹但阻止使用404直接访问

时间:2011-10-05 16:29:57

标签: .htaccess mod-rewrite redirect dns

我有一个共享主机,我想在其中托管多个网站。为此,为了清楚起见,我已将主域(即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文件。


注意:

  1. 我忘了说/mydomain.com/里面有一个名为/0.1/的附加文件夹用于版本控制。
  2. 如果在/mydomain.com/0.1/htaccess中的“RewriteEngine On”之后包含“RewriteOptions Inherit”,则会收到500内部服务器错误。
  3. 完全删除/mydomain.com/0.1/ htaccess文件将为www.mydomain.com/mydomain.com/0.1/生成所需的404错误,并在www.mydomain.com中生成505

1 个答案:

答案 0 :(得分:0)

重写规则中的R标志应该在301到399之间,所以它不能是404!
你的规则应该如下:

RewriteCond %{THE_REQUEST}    ^/mydomain\.com/? [NC]
RewriteRule (.*)  throw_404.php [L]

创建throw_404.php并发送404状态代码!并在您的第一条规则中添加L标志,以避免该规则与我的规则发生冲突!