我不应该写一个通用的.htaccess RewriteRule吗?

时间:2011-12-20 16:29:19

标签: .htaccess mod-rewrite

我找到了一些非常有用的代码:

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

的建议编辑代码

2 个答案:

答案 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 }} *。否则不要使用它。雅虎链接比我更好地解释了它。