如何在localhost和live服务器上获得相同的$ _SERVER ['REQUEST_URI']

时间:2012-04-11 16:20:52

标签: php url-routing

所以这就是构建调度程序类,我需要根据请求URI调度http请求,所以我只是在域后面的URI的一部分中进行了交互。

现在,当我在这样的URI上处理实时服务器时:

www.domain.com/controller/method/params/

REQUEST_URI会返回:

/controller/method/params/

但是当我在本地机器上工作时,我有这样的URI:

localhost/project/controller/method/params/

和REQUEST_URI会返回:

/project/controller/method/params/

那么有一种优雅而整洁的方式来告诉php只让我需要来自URI的params吗? 它必须是$ _SERVER ['REQUEST_URI'],但我需要在实时和本地服务器上使用相同的字符串吗?

谢谢!

Dispatcher将当前请求URI与配置文件中定义的URI进行比较。在实时服务器上它匹配,但在本地机器上有一个段,然后在实时服务器上。

我怎么能处理这个?

4 个答案:

答案 0 :(得分:3)

通常我配置我的本地网络服务器以响应“test.mysite.com”并在hosts文件中将test.mysite.com设置为127.0.0.1,这样我就能更好地模拟生产环境,而且我不会被迫在URL中使用子路径

如果使用apache webserver,则只需设置N个虚拟主机即可。

答案 1 :(得分:1)

您可以简单地删除URL开头的路径(如果存在)。

$path = '/project/'; // for localhost/project/controller/method/params/
//$path = '/';       // for domain.tld/controller/method/params/

$url = getenv('REQUEST_URI');
if(strpos($url, $path) === 0)
{
    $url = str_replace($path, '', $url, 1);
}
print $url;

我没有测试过上面的代码,所以流浪“/”可能搞砸了。如果需要,您可以随时使用$url = trim($url, '/')修剪网址。

答案 2 :(得分:0)

$url = $_SERVER['REMOTE_ADDR'].$_SERVER['REQUEST_URI'];

是你想要的吗?

答案 3 :(得分:0)

如果检测到localhost,我会使用内置的 array_shift()函数。

var adc = (from v in CAPcontext.AdultDayCares
               join s in CAPcontext.States on v.state equals s.Name
             select v).ToList();

foreach (var item in adc)
    { item.City = "some city";
         // updating more fields but omitted here
     }

CAPcontext.SubmitChanges();