我找到了一些非常有用的代码:
RewriteEngine On
RewriteCond %{HTTP_HOST} ^www.example.com$ [NC]
RewriteRule ^(.*)$ http://example.com/$1 [R=301,L]
来自另一个Stack Overflow帖子的: Remove WWW prefix from your website
我经常在各个子域和站点上重复使用相同的代码,因此决定重写通用版本。我想出了以下内容:
RewriteEngine On
RewriteCond %{HTTP_HOST} ^www\.(.*) [NC]
RewriteRule ^(.*)$ http://%1/$1 [R=301,L]
它似乎有效,但任何人都可以告诉我为什么我不应该使用它?我错过了一个明显的缺陷吗?
编辑:我知道删除www有相关问题,但在这种情况下,我对写一个通用的htaccess RewriteRule(而不是规则本身的行为)引起的问题更感兴趣
编辑:按照@ulrich
的建议编辑代码答案 0 :(得分:1)
我也会逃避.
,否则它会与www2.somedomain.com
匹配,而你的%1最终会成为.somedomain.com
(如果您将来配置了这样的子域名)
RewriteCond %{HTTP_HOST} ^www\.(.*) [NC]
如果您想进一步将其限制为.com,可以使用
RewriteCond %{HTTP_HOST} ^www\.(.+\.com)$ [NC]
或.net等
RewriteCond %{HTTP_HOST} ^www\.(.+\.(com|net|edu))$ [NC]
您可能还想在RewriteEngine On之后添加RewriteBase /
,以防您以后需要添加其他规则到.htaccess。
除非这些情况,它应该按原样运作。
答案 1 :(得分:0)
答案就在于这个词:
以下是完整的解释:
http://developer.yahoo.com/performance/rules.html#cookie_free
引用:
当浏览器发出静态图像请求并发送cookie时 连同请求,服务器没有任何用途 饼干。因此,他们只会毫无理由地创建网络流量。您 应确保使用无cookie请求静态组件 要求。创建子域并托管所有静态组件 那里。
如果您的域名是www.example.org,则可以托管您的静态组件 在static.example.org上。 但是,如果你已经设置了cookie 顶级域名example.org而不是www.example.org,然后全部 对static.example.org的请求将包含那些cookie 。在这 例如,您可以购买一个全新的域名,托管您的静态组件 在那里,并保持这个域无cookie。雅虎使用yimg.com,YouTube 使用ytimg.com,亚马逊使用images-amazon.com等。
问题在于:以粗体显示小心:
如果您没有www,域名的所有Cookie都将发送到所有子域名。即你的static.mondomain.com有34个小图片,你的网站是www.mondomain.com,你有4 kb的cookies。没问题,一切都很好。但是,如果您的网站是没有“www”的mondomain.com,则下载图片时所有这些4kb cookie都将被发送到static.mondomain.com,从而产生巨大且无用的带宽损失。
这就是我在编写我的版本#1,然后编写我的框架#2时所做的。希望我的版本#3没有做到这个初学者的错误,我希望你也能避免这样做!
对不起,我的英语不太好。我想说的是:如果你计划拥有一个可以完成所有工作的域名(网页+图片+ pdf + ......和儿子),那么使用 * {{1 }} *。否则不要使用它。雅虎链接比我更好地解释了它。