【问题标题】:Is it possible to determine whether "www." was entered as part of the URL into address bar purely from PHP?是否可以确定是否“www.”是作为 URL 的一部分纯粹从 PHP 输入到地址栏中的吗?
【发布时间】:2016-12-30 17:05:59
【问题描述】:

在没有“www”的情况下访问该网站。在浏览器中对应,

与“site.com”一样,仍会从 $_SERVER['SERVER_NAME'] 中回显“www.site.com”;

这似乎没什么大不了的,只需在进行 ajax 调用时在前端确定这一点,使用类似 location.href 之类的东西,对吧?

或者干脆删除“www”。来自 SERVER_NAME。很好的解决方案,但没有解决主要问题。现在 PHP 代码必须依赖 JavaScript 吗?后端不应该能够确定 yes-www 与 no-www 地址吗?

此外,当您有

时,更不用说 生成 必须调用服务器的代码的 PHP,使用 $_SERVER['SERVER_NAME'] 的解决方案将产生跨域安全错误。

所以 -- 问题是 -- PHP 中有没有办法自动判断是否 www.部分是否已作为域名的一部分输入到浏览器的地址栏中?

问题在于,现在您的服务器端 PHP 代码依赖于 JavaScript,有时可能会在浏览器中被禁用。总的来说,这听起来像是一种尴尬的做法。

【问题讨论】:

  • 您的网络服务器可能应该将没有www. 的请求转换为带有www. 的请求(反之亦然),因此从这个角度来看,所有内容都应该在同一个域上提供服务。
  • 强制从非 www 重写为 www。会有用户说,“但是 http://example.com 是最流行的方式!”
  • 所以换一种方式重写。为了记录,google.com 将您发送到www.google.com。无论 Google 做什么,我都会很乐意做。
  • 建议使用重写规则来强制使用 WWW 或不使用 WWW。 〜编辑,无法将代码sn-ps放入cmets ..检查我的答案

标签: php url no-www


【解决方案1】:

是的,这是完全可能的。

<?php 
    //Will be true if www. exists, and false if not. 

    $host_has_www = (strpos($_SERVER['HTTP_HOST'], 'www.') !== false) ? true : false;

    if ($host_has_www == true) { 
      //Do something
    }

?>

【讨论】:

  • 如果主机名只是 include 'www.',这也将产生 true,例如subdomain.www.anothersubdomain.site.com。你应该检查像strpos(...) === 0这样的位置,或者,我的偏好,substr($host,0,4) === 'www.'
  • 确实,我问这个问题其实是搞错了:/ HTTP_HOST 确实准确地反映了www。每种情况下的一部分。我无意中看到了一个从 www-present 域缓存的缓存页面。
【解决方案2】:

强制 www 编辑 .htaccess

RewriteCond %{HTTP_HOST} !^www\.
RewriteRule ^(.*)$ http://www.%{HTTP_HOST}/$1 [R=301,L]

那么每个请求都会有 www 或者使用类似的方法去掉 www

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2012-04-30
    • 2015-09-01
    • 1970-01-01
    • 1970-01-01
    • 2014-10-01
    • 1970-01-01
    • 1970-01-01
    • 2013-10-23
    相关资源
    最近更新 更多