我希望能够有一种方法来创建在开发和生产中有效的动态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
。
答案 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']
,假设你正在运行它。