2017-06-23 91 views
1

当访问URL www.domain.com/test.php,既$_SERVER['SERVER_NAME']$_SERVER['HTTP_HOST']输出域名而不万维网。前缀:domain.com

为什么会这样?

编辑:如上所述here,$_SERVER['SERVER_NAME']可能与实际请求的URL不同,但$_SERVER['HTTP_HOST']应返回域。

PHP版本:7.1 Apache的版本:2.2

的.htaccess内容如下(最有趣的部分是顶部重写块)

<IfModule mod_rewrite.c> 
    RewriteEngine On 
    RewriteBase/
    RewriteCond %{HTTP_HOST} ^www\.(.*)$ [NC] 
    RewriteRule ^(.*)$ https://%1/$1 [R=301,L] 
</IfModule> 

# BEGIN Force SSL for SAKURA 
# RewriteしてもHTTPS環境変数を有効にする 
SetEnvIf REDIRECT_HTTPS (.*) HTTPS=$1 


# 常時HTTPS化(HTTPSが無効な場合リダイレクト) 
<IfModule mod_rewrite.c> 
RewriteEngine on 
RewriteCond %{ENV:HTTPS} !on 
RewriteCond %{REQUEST_URI} !/wp-cron\.php$ 
RewriteRule .* https://%{HTTP_HOST}%{REQUEST_URI} [R=301,L] 
</IfModule> 
# END Force SSL for SAKURA 

<IfModule mod_rewrite.c> 
RewriteEngine On 
RewriteBase/
RewriteRule ^index\.php$ - [L] 
RewriteCond %{REQUEST_FILENAME} !-f 
RewriteCond %{REQUEST_FILENAME} !-d 
RewriteRule . /index.php [L] 
</IfModule> 

# END WordPress 

这里是test.php的内容:

<?php 
echo $_SERVER['SERVER_NAME']; 

echo $_SERVER['HTTP_HOST'].$_SERVER['REQUEST_URI']; 

输出是“domain.com”和“domain.com/test”。

+0

可能重复[PHP:$ \ _ SERVER变量:$ \ _ SERVER \ ['HTTP \ _HOST'\] vs $ \ _ SERVER \ ['SERVER \ _NAME'\]](https://stackoverflow.com/questions/13772934/php-server-variables-serverhttp-host-vs-serverserver-name) –

+0

@Obsidian Age这个线程在上面的问题中可能是“可能重复的”? – voodoo417

+0

@Obsidian感谢您的建议,但这个问题涉及到为什么这两个变量不同,我的问题是为什么我的URL不同于这些变量(至少HTTP_HOST应该是我所知道的相同) – TheTrueTDF

回答

0

那么你提到的最有趣的重写块是从URL中删除www.与301重定向。因此,没有办法通过www.将请求发送到您的PHP脚本,因为包括www.在内的任何请求都会发出301重定向,并且永远不会到达PHP脚本。浏览器然后重新发布基于301重定向的请求,现在它会到达没有www.的脚本。

您可以通过注释掉顶部的块,清除浏览器缓存(重要的 - 或使用不同的浏览器)并再次访问测试页来测试。

+0

感谢您的回答, 事情是,我们实际上希望这种重定向工作,但现在,当我们将www.domain.com称为www.domain.com时,它仍停留在www.domain.com。由于我没有找到任何方法使这个重定向工作,我想我可以在PHP中编写重定向,但我无法检测到请求的URL是否以www开头或不是(因为$ _SERVER ['HTTP_HOST']值是“domain.com”)。我希望这更清楚。 编辑:htaccess重定向做为http工作,但不是https – TheTrueTDF

相关问题