mod_rewrite 规则可以修改 PHP 中的 require_once 指令吗?

Posted

技术标签:

【中文标题】mod_rewrite 规则可以修改 PHP 中的 require_once 指令吗?【英文标题】:Can mod_rewrite rules modify require_once instructions in PHP? 【发布时间】:2014-05-04 03:32:24 【问题描述】:

还是我误解了 mod_rewrite 的用法?

我需要几个 Web 应用程序实例,简单的方法是将所有文件复制到另一个文件夹并修改配置文件以连接到另一个数据库,但我正在尝试根据子文件夹更改连接参数

Options +FollowSymLinks
RewriteEngine On
RewriteRule xyz/config.php config.php?id=xyz [L]
RewriteRule xyz/(.*)$ $1 [QSA]

以及对 config.php 的一些更改

//Default config
config['database'] = 'db1';
config['user'] = 'user1';
...
//config for xyz
if($_GET['id'] == 'xyz')
  config['database'] = 'db2';
  config['user'] = 'user2';
  ...

有一个名为 ajax.php 的 php 文件来响应所有 Ajax 请求

require_once('config.php');

$task = $_GET['task'];    

if($task == 'some_task')
  //Task according to ajax request
 else ($task == 'another_task')
  //...

【问题讨论】:

【参考方案1】:

没有。 mod_rewrite 发生在 PHP 执行开始之前,仅影响 Apache 服务文件的方式(它实际上并没有改变文件系统中的任何内容,因此它不会影响 PHP)。

但是,您可以使用$_SERVER['REQUEST_URI'] 参数来确定要加载的配置文件。

例如

if(substr($_SERVER['REQUEST_URI'], 0, 4) == 'xyz/') 
     $config = include('/path/to/xyz/config.php');

else if(substr($_SERVER['REQUEST_URI'], 0, 4) == 'abc/') 
     $config = include('/path/to/abc/config.php');

...等

【讨论】:

以上是关于mod_rewrite 规则可以修改 PHP 中的 require_once 指令吗?的主要内容,如果未能解决你的问题,请参考以下文章

mod_rewrite 到 nginx 重写规则

如何调试 mod_rewrite 规则?

PHP Pretty URLs 两个 mod_rewrite 规则的组合?

mod_rewrite:无法访问真实文件和目录

apache mod_rewrite适用于任何可能性的规则

ThinkPHP 利用.htaccess文件的 Rewrite 规则隐藏URL中的 index.php