我可以依靠mod_rewrite吗?
我正在为我创建的网站构建一个小型PHP框架,并且想知道是否可以依靠mod_rewrite作为大多数主机上的可用工具。我可以依靠mod_rewrite吗?
使用它甚至是一个好主意吗? 已有许多优点(一个入口点,“漂亮”,可读的URL)
它不在哪里?
如果mod_rewrite在该主机上不可用,我应该在框架中添加一个备选项吗?
mod_rewrite的是一般可用。如果它在主机的服务器上不可用,请删除它们。
如果您正在开发一个公开可用的应用程序,则应该考虑mod_rewrite可能不可用并支持替代方法。 AcceptPathInfo
就是其中之一。
+1您提供的选项越多,您的产品拥有的机会就越多。 – 2010-03-04 17:05:12
mod_rewrite的只是为Apache,所以如果您需要在IIS或别的东西,你将有问题的工作,但在PHP中,你也可以使用这个:
private function getURI()
{
$uri = "";
if (isset($_SERVER['PATH_INFO']))
$uri = getValueFrom($_SERVER, 'PATH_INFO', @getenv('PATH_INFO'));
elseif (isset($_SERVER['ORIG_PATH_INFO']))
$uri = getValueFrom($_SERVER, 'ORIG_PATH_INFO', @getenv('ORIG_PATH_INFO'));
else
$uri = "";
$scriptname = basename($_SERVER['SCRIPT_FILENAME']);
if (strpos($uri, $scriptname) > -1)
$uri = substr($uri, strpos($uri, $scriptname) + strlen($scriptname), strlen($uri));
return $uri;
}
更改网址是好的做法,actualy,广泛适用在网络上,是一个SEO recomendation因为是最好有这样的:
domain.com/aboutus
这个
domain.com/index.php?app=main &行动=显示& ID = 1
mod_rewrite的模块通常是大多数的Apache承载这些天缴费。但是,要解决缺失问题并不困难,通过这样做可以确保人们坚持使用关闭的主机/ IT人员或运行IIS的主机/ IT人员等。
当今构建的大多数新框架或应用程序都使用mod_rewrite通过单个前置加载PHP文件(称为引导,前置模式等)截取所有URL请求。不是域名的URL部分被解析为某个对象,并且只要您需要访问该URL,就会使用该对象。
当mod_rewrite的不可用时,在
http://example.com/index.php/foo/baz/bar
形式URL被代替使用。上述URL的请求由index.php文件处理。然后,您可以解析服务器变量中的一个像
$_SERVER['REQUEST_URI'], $REQUEST['PATH_INFO'], etc.
到一些对象(同一个对象,如果你有mod_rewrite的你会使用),并使用该对象时,你需要访问的URL信息。
无论哪种方式,你的框架/应用程序的其余部分只是访问对象,而不必担心信息如何进入。
它在大多数服务器可用 - 但如果你怀疑这是不是你应该做一个动态的方式来获取链接 - 然后你可以有你的一切,说是否之前修改预定义常数不是mod_rewrite可用。然后,您可以使用该常量获取URL以确定发生的情况。
我认为,任何像样的应用程序应该使用mod_rewrite
,大多数web主机都提供了这一点。如果他们不提供,请下车。
而且,不只是mod_rewrite
是一个不错的选择使用,但也是这样的php_value
max_execution_time
等其他PHP设置,以确保您自定义您的环境,以满足您的应用目的。
我说的是我的客户的主机。 – someone 2010-03-04 16:25:22
这是如何改变答案的?它仍然普遍可用,如果不是,您应该将客户端切换到不同的主机上。 – ceejayoz 2010-03-04 16:28:09
如果您怀疑客户端可能无法访问mod_rewrite的,那么你应该基于这样的假设建立自己的框架。 – thetaiko 2010-03-04 16:33:03