所以这就是构建调度程序类,我需要根据请求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进行比较。在实时服务器上它匹配,但在本地机器上有一个段,然后在实时服务器上。
我怎么能处理这个?
答案 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();