我可以使用$ _SERVER变量获取虚拟目录(如果有的话)吗?

时间:2013-04-23 00:47:05

标签: php html

我希望能够有一种方法来创建在开发生产中有效的动态URL。现在我正在构建这样的URL:

header("Location: http://".$_SERVER["HTTP_HOST"]."/contact.php?failed");

但问题是我目前在我的WAMP服务器上运行这样的网站:

http://localhost/vdname/contact.php

因此该代码行不会在开发中生成正确的URL - 它构建:

http://localhost/contact.php?failed
而是

因此我获得了预期的404。如何正确构建URL以便它们可以在开发生产中工作?

修改

根据一些建议,最好在VirtualHost文件中利用httpd.conf条目,以便我可以在本地使用普通域名。所以,我试图让它工作,它不能像我想的那样工作,考虑来自conf的代码:

#Listen 12.34.56.78:80
Listen 80

# Listen for virtual host requests on all IP addresses
NameVirtualHost *:80

<VirtualHost *:80>
    DocumentRoot /www/example
    ServerName local.example.com
</VirtualHost> 

以及关联的hosts文件配置:

127.0.0.1       local.example.com

但是当我导航到http://local.example.com/contact.php时,我得到了403 Forbidden,当我运行nslookup local.example.com时,我也没有127.0.0.1

1 个答案:

答案 0 :(得分:1)

对于我的内容,我使用$_SERVER['SERVER_NAME']代替$_SERVER['HTTP_HOST']。因为HTTP_HOST是从HTTP请求标头中提取的,所以它是客户端设置的。如果有人从www.yoursite.com和yoursite.com访问您的网站,您可能会在同一会话中为HTTP_HOST提供两个不同的结果。这可能会对Cookie和重定向造成严重破坏,更不用说您的网站在搜索引擎优化和流量模式方面。

要保留在同一网站上,而不是使用非现场网址(包含HTTP)填充header()位置命令,您可以改为使用此代码:

header("Location: /contact.php?failed");

同样在您的表单中,您可以使用:

<form action="/gdform.php" method="post" style="float: left;">

通过使用该样式的链接,浏览器将保留在同一站点上而不执行查找(DNS),并且它将保留在同一个SubDNS中。

你需要确保在Apache中正确配置了$_SERVER['SERVER_NAME'],假设你正在运行它。