删除 www 并重定向 index.html 时出现一些问题

删除 www 并重定向 index.html 时出现一些问题

我无法使用以下设置来执行我想要的操作。

我想删除所有 WWW,并将 index.html 转发到根目录。我希望这适用于所有域,因此我在 httpd.conf 目录指令中执行。

我尝试了很多变体,但都没有成功。最新版本如下(域名位于 /var/www/html 内,位于单独的目录中)。

http://www.example.com/index.html > http://example.com 
http://www.example.com/someother/index.html > http://example.com/someother/

谢谢,

玛丽亚

<Directory "/var/www/html/*/"> 
    RewriteEngine on 
    RewriteBase /  

    RewriteCond %{HTTP_HOST} ^www\.(.+)$ [NC]  
    RewriteRule ^(.*)$ http://%1/$1 [R=301,L]   

    #RewriteCond %{REQUEST_URI} /^index\.html/        
    RewriteRule ^(.*)index\.html$ / [R=301,L] 


        Options ExecCGI Includes FollowSymLinks 
        AllowOverride AuthConfig 
        AllowOverride All                       
        Order allow,deny 
        Allow from all 

 </Directory>    

答案1

我还没有尝试过,但我会通过创建两个虚拟主机来实现 www 重定向。一个用于 www,一个用于非 www,www 中的一个指令用于重定向到另一个

<VirtualHost *:80>
    ServerName www.example.com
    Redirect / http://example.com
</VirtualHost>

<VirtualHost *:80>
    ServerName example.com
    DocumentRoot /path/to/docroot
    ... other stuff as needed ...
</VirtualHost>

如果您的 index.html 中确实包含您的内容,那么您需要一个 DirectoryIndex 来指定 index.html 是 httpd.conf 中的有效索引:

DirectoryIndex index.html

这通常是默认设置,因此可能需要更多信息来了解您想要用它实现什么目的。

答案2

这帮我解决了这个问题。正如我所怀疑的,应用重写规则的地方有很大的不同。包括我在内的很多人似乎都没有意识到这一点。

http://wiki.apache.org/httpd/RewriteContext

Apache HTTPD 服务器以离散阶段处理请求。虽然这通常对用户和管理员来说是透明的,但当规则集放置在不同的上下文中时,它确实会影响 mod_rewrite 的行为。简单来说,当规则放置在 VirtualHost 块中(或主服务器上下文中)时,它们会在服务器将请求的 URI 映射到文件系统路径之前进行评估。相反,当规则放置在 .htaccess 文件中或主服务器配置中的 Directory 块中时,它们会在此阶段发生后进行评估。

相关内容