我可以依赖mod_rewrite吗?

时间:2010-03-04 16:21:47

标签: php apache hosting

我正在为我创建的网站构建一个小型PHP框架,并且想知道我是否可以依赖mod_rewrite在大多数托管服务商上可用。

  • 使用它是不是一个好主意? 已经有很多好处(一个入口点,“漂亮”,可读的URL)

  • 哪里不可用?

  • 如果该主机上没有mod_rewrite,我是否应该在框架中包含替代方案?

6 个答案:

答案 0 :(得分:5)

mod_rewrite通常可用。如果主机服务器上没有它,请删除它们。

答案 1 :(得分:3)

目前,大多数Apache主机上都可以使用MOD_REWRITE模块。但是,并不是很难解决它的缺席,并且这样做可以确保人们坚持使用已经关闭它的主机/ IT人员,或者运行IIS的主机/ IT人员等等。 p>

今天构建的大多数新框架或应用程序使用mod_rewrite通过单个前端加载PHP文件(称为Bootstrapping,Frontloading模式等)拦截所有URL请求。不是域名的URL部分被解析为某个对象,只要您需要访问该URL,就会使用该对象。

当MOD_REWRITE不可用时,网址为

http://example.com/index.php/foo/baz/bar
改为使用

。上述URL的请求由index.php文件处理。然后,您可以解析其中一个服务器变量,如

$_SERVER['REQUEST_URI'], $REQUEST['PATH_INFO'], etc.

到某个对象(如果你有mod_rewrite就使用同一个对象),并在需要访问URL信息时使用该对象。

无论哪种方式,您的框架/应用程序的其余部分只是访问该对象,而不必担心信息是如何进入的。

Additional Reading

答案 2 :(得分:2)

如果您正在开发一个公开可用的应用程序,您应该考虑mod_rewrite可能不可用并支持替代方案。 AcceptPathInfo就是一个。

答案 3 :(得分:0)

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;
}

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; }

更改网址是一种很好的做法,实际上在网络上广泛使用并且是SEO推荐,因为更好有这个:

domain.com/aboutus

到这个

domain.com/index.php?app=main&action=show&id=1

答案 4 :(得分:0)

它可以在大多数服务器上使用 - 但是如果您怀疑它不是,那么您应该采用动态方式来获取链接 - 然后您可以拥有一个预定义的常量,您可以在显示mod_rewrite是否可用之前修改该常量。然后,您可以使用该常量获取URL作为确定发生情况的方式。

答案 5 :(得分:0)

我认为任何体面的应用程序都应该使用mod_rewrite,并且大多数Web主机都提供此功能。如果他们不提供,请下车。

此外,mod_rewrite不仅是一个很好的选择,而且还有其他php设置,例如php_value max_execution_time等等,以确保您自定义环境以适合您的应用目的

相关问题