Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/266.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/apache/9.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Php 我可以依赖mod_重写吗?_Php_Apache_Hosting - Fatal编程技术网

Php 我可以依赖mod_重写吗?

Php 我可以依赖mod_重写吗?,php,apache,hosting,Php,Apache,Hosting,我正在为我创建的网站构建一个小型PHP框架,我想知道我是否可以依赖大多数主机上提供的mod_rewrite 使用它是个好主意吗? 已经有很多优点(一个入口点,“漂亮”,可读的URL) 哪里没有 如果主机上没有mod_rewrite,我是否应该在框架中包含一个替代方案 通常可以使用mod_rewrite。如果在主机服务器上不可用,请删除它们。 如果开发一个公开可用的应用程序,则应该考虑MODY重写可能不可用,并支持另一种选择。是一个。mod_rewrite仅适用于apache,因此如果您需要在I

我正在为我创建的网站构建一个小型PHP框架,我想知道我是否可以依赖大多数主机上提供的mod_rewrite

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

  • 哪里没有

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


通常可以使用mod_rewrite。如果在主机服务器上不可用,请删除它们。

如果开发一个公开可用的应用程序,则应该考虑MODY重写可能不可用,并支持另一种选择。是一个。

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

更改URL是一种很好的做法,实际上在web上被广泛使用,是一种SEO建议,因为最好有:

domain.com/aboutus

对此


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

现在大多数Apache主机上都可以使用MOD_重写模块。但是,解决它不存在的问题并不难,通过这样做,您可以确保人们与关闭它的主机/it人员或运行IIS的主机/it人员一起使用/等

今天构建的大多数新框架或应用程序都使用mod_rewrite通过一个前端加载PHP文件(称为引导、前端加载模式等)拦截所有URL请求。不是域名的URL部分被解析为某个对象,并且在需要访问URL时使用该对象

当MOD_REWRITE不可用时,URL以

http://example.com/index.php/foo/baz/bar
而是使用。对上述URL的请求由index.php文件处理。然后,您可以解析其中一个服务器变量,如

$_SERVER['REQUEST_URI'], $REQUEST['PATH_INFO'], etc.
进入某个对象(如果你重写了mod_,你会使用同一个对象),并在需要访问URL信息时使用该对象

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


它在大多数服务器中都可用——但如果您怀疑它不可用,则应采用动态方式获取链接——然后您可以在所有说明mod_rewrite是否可用之前修改一个预定义常量。然后,您可以使用该常量获取URL以确定发生了什么。

我认为任何合适的应用程序都应该使用
mod_rewrite
,大多数web主机都提供了这一功能。如果他们不提供,就离开他们


此外,不仅使用
mod_rewrite
是一个很好的选择,而且还可以使用其他php设置,例如
php_值
max_execution_time
等等,以确保您自定义环境以满足应用程序的目的。

我说的是我客户机的主机。这会如何改变答案?它仍然普遍可用,如果不可用,您应该将您的客户端切换到其他主机。如果您怀疑客户端可能无法访问mod_rewrite,那么您应该基于该假设构建您的框架。真的是ceejayoz吗?客户A:“我想买你的软件,但我的主机公司不支持mod_rewrite。”回答1:“太糟糕了!切换主机或GTFO”回答2:“幸好我的软件支持mod_rewrite的替代方案!”我想知道哪一个能为你带来更多的客户?即使mod_rewrite真的应该在一个像样的主机包上提供,约翰恩说得很好。+1你提供的选择越多,你的产品就越有机会。