删除www和重定向index.html的一些问题

时间:2010-10-17 06:19:34

标签: apache mod-rewrite

我无法通过以下设置做我想做的事。

我想删除所有WWW,并将index.html转发到root目录。我希望这适用于所有域,所以我在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/

谢谢,

Maria

<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>      

2 个答案:

答案 0 :(得分:0)

请尝试以下规则:

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

RewriteRule ^/(.*/)?index\.html$ /$1 [R=301,L]

答案 1 :(得分:0)

这解决了我。正如我所怀疑的,在应用重写的过程中存在很大差异。包括我在内的很多人似乎都没有意识到这一点。

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

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