0

我希望能够有一种方法来创建适用于开发生产的动态 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

4

1 回答 1

1

对于我的东西,我使用$_SERVER['SERVER_NAME']而不是$_SERVER['HTTP_HOST']. 因为它HTTP_HOST是从 HTTP 请求标头中提取的,并且是客户端设置的。如果有人从 www.yoursite.com 和 yoursite.com 访问您的网站,您实际上可能会HTTP_HOST在同一会话中获得两个不同的结果。这会对 cookie 和重定向造成严重破坏,更不用说在 SEO 和流量模式方面对您的网站造成影响。

要留在同一个站点上,而不是header()使用异地 URL(包含 HTTP)填充 location 命令,您可以使用它来代替:

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

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

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

通过使用这种类型的链接,浏览器将停留在同一个站点上而不执行查找 (DNS),并且它将停留在同一个 SubDNS 中。

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

于 2013-04-23T00:58:30.257 回答