【问题标题】:Is there a reason why I should not write a generalised .htaccess RewriteRule?我不应该写一个通用的 .htaccess RewriteRule 有什么原因吗?
【发布时间】:2023-03-28 11:30:01
【问题描述】:

我发现了一些非常有用的代码:

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 的建议编辑代码

【问题讨论】:

    标签: .htaccess mod-rewrite


    【解决方案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。

    除非出现这些情况,否则它应该可以正常工作。

    【讨论】:

      【解决方案2】:

      答案就在这个词里:

      优化

      这里有一个完整的解释:

      http://developer.yahoo.com/performance/rules.html#cookie_free

      引用:

      当浏览器请求静态图片并发送 cookie 时 连同请求,服务器对那些没有任何用处 饼干。因此,他们只会无缘无故地创建网络流量。你 应确保使用无 cookie 请求静态组件 要求。创建一个子域并托管所有静态组件 在那里。

      如果您的域是 www.example.org,您可以托管您的静态组件 在 static.example.org 上。 但是,如果您已经在 顶级域 example.org 而不是 www.example.org,然后全部 对 static.example.org 的请求将包括这些 cookie。在这个 情况下,您可以购买一个全新的域,托管您的静态组件 在那里,并保持此域无 cookie。雅虎!使用 yimg.com、YouTube 使用 ytimg.com,亚马逊使用 images-amazon.com 等等。

      最大的问题就在这里:仔细阅读粗体:

      如果您没有 www,则您域的所有 cookie 将被发送到所有子域。 IE。您的 static.mondomain.com 中有 34 个小图像,您的网站是 www.mondomain.com,您有 4 kb 的 cookie。没问题,一切都很好。但是,如果您的网站是没有“www”的 mondomain.com,那么在下载图像时所有这些 4kb cookie 将被发送到 static.mondomain.com,从而造成巨大且无用的带宽损失

      这就是我在编写我的版本 #1,然后是我的框架的 #2 时所做的。希望我的版本#3 不会犯这个初学者的错误,我希望你也能避免这种情况!


      做多做空

      对不起,我的英语不是很好。我想说的是:如果您打算拥有一个可以做所有事情的域名(网络 + 图像 + pdf +... 等等),那么 使用 *www *。否则不要使用它。雅虎链接比我解释得更好。

      【讨论】:

      • 你能帮我澄清一下吗?这是反对规则被普遍化这一事实的论据,还是仅仅反对规则正在做什么?我知道删除 www 的问题 - 我对概括的任何问题更感兴趣。
      • 很抱歉我的英语不是很好。我想说的是:如果您打算拥有一个可以做所有事情的域名(网络 + 图像 + pdf +... 等等),那么 使用 www。否则不要使用它。雅虎链接比我解释得更好。
      猜你喜欢
      • 2021-04-01
      • 1970-01-01
      • 1970-01-01
      • 2021-12-18
      • 1970-01-01
      • 1970-01-01
      • 2022-11-26
      • 1970-01-01
      • 2021-05-21
      相关资源
      最近更新 更多