Dis*_*oat 65 mod-rewrite redirect virtualhost apache-2.2
我有一个带有 Apache 的专用服务器,我在上面设置了一些 VirtualHosts。我已经设置了一个来处理 www 域以及非 www 域。
我的 www 的 VH .conf 文件:
<VirtualHost *>
DocumentRoot /var/www/site
ServerName www.example.com
<Directory "/var/www/site">
allow from all
</Directory>
</VirtualHost>
Run Code Online (Sandbox Code Playgroud)
有了这个.htaccess:
RewriteEngine on
RewriteBase /
RewriteCond %{HTTP_HOST} ^www.example.com [NC]
RewriteRule ^(.*)$ http://example.com/$1 [L,R=301]
Run Code Online (Sandbox Code Playgroud)
有没有一种简单的方法可以将 www 重定向到非 www 版本?目前我将两个版本发送到同一个DocumentRoot并使用,.htaccess但我确定我必须能够在 VirtualHost 文件中做到这一点。
Dis*_*oat 116
事实证明mod_rewrite,除了RewriteBase规则之外,VirtualHosts 文件中的规则都很好。我结束了这个:
<VirtualHost *>
ServerName www.example.com
RewriteEngine on
RewriteCond %{HTTP_HOST} ^www.example.com
RewriteRule ^/(.*)$ http://example.com/$1 [L,R=301]
</VirtualHost>
Run Code Online (Sandbox Code Playgroud)
编辑:根据 joschi 在评论中的建议,我现在使用这个简化版本的Redirect指令来自mod_alias:
<VirtualHost *>
ServerName www.example.com
Redirect 301 / http://example.com/
</VirtualHost>
Run Code Online (Sandbox Code Playgroud)
小智 5
使用 301 重定向时要非常小心,因为默认情况下,接收 301 重定向的浏览器将永久存储它 - 这意味着您将放弃对该浏览器在尝试访问该域时将看到的内容的控制www.example.com。
例如,请参阅此讨论http://getluky.net/2010/12/14/301-redirects-cannot-be-undon/
因此,要么确保它不被缓存,要么使用 mod_proxy (我推荐 mod_proxy)。
如果您愿意让用户在浏览器地址栏上看到 URL 更改,请使用 mod_rewrite:
<VirtualHost *>
ServerName www.example.com
RewriteEngine on
RewriteCond %{HTTP_HOST} ^www.example.com
RewriteRule ^/(.*)$ http://example.com/$1 [L,R=301,E=nocache:1]
## Set the response header if the "nocache" environment variable is set
## in the RewriteRule above.
Header always set Cache-Control "no-store, no-cache, must-revalidate" env=nocache
## Set Expires too ...
Header always set Expires "Thu, 01 Jan 1970 00:00:00 GMT" env=nocache
</VirtualHost>
Run Code Online (Sandbox Code Playgroud)
如果您希望“重定向”对用户不可见,请使用 mod_proxy:
<VirtualHost *>
ServerName www.example.com
ProxyRequests Off
<Proxy *>
Order Deny,Allow
Deny from all
Allow from 203.0.113.67
</Proxy>
ProxyPass / http://example.com/
ProxyPassReverse / http://example.com/
</VirtualHost>
Run Code Online (Sandbox Code Playgroud)
应该注意的是,mod_proxy 如果配置不当,可能会损害您的网络。
| 归档时间: |
|
| 查看次数: |
250966 次 |
| 最近记录: |