我无法使用以下设置来执行我想要的操作。
我想删除所有 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 块中时,它们会在此阶段发生后进行评估。