使用PHP包含()和Apache mod_rewrite规则的奇怪行为

时间:2014-05-10 20:15:38

标签: php .htaccess mod-rewrite

我有一个.htaccess文件,其中包含以下代码:

RewriteBase /

RewriteEngine on
RewriteCond %{REQUEST_FILENAME} !-d
RewriteCond %{REQUEST_FILENAME}\.php -f
RewriteRule ^(.*)$ $1.php

我在链接到另一个.php页面时没有遇到任何问题,我只是放了href="/pages/home"就行了。但由于一个奇怪的原因,我似乎无法以同样的方式使用php include()。使用include '';会有什么不同吗?

如果没有,那么我必须要找一些其他错误。这就是为什么我先询问是否存在与包括链接有什么不同的原因。

4 个答案:

答案 0 :(得分:2)

.htaccess是一个网络浏览器级配置,这意味着您将根据REQUEST_URI重写Web请求。 PHP的include()是文件系统级功能,因此您需要包含要包含的PHP的文件系统级路径。通常这将是一个相对路径。查看链接以获取更多示例。

答案 1 :(得分:1)

你的意思是说你要跟include '/pages/home'绑在一起,因为那不是包括作品的方式。它使用文件路径,它与apache的url重写无关。

答案 2 :(得分:1)

原始海报评论说:

  

那么如果home.php在根目录中,我会在引号内放什么? include '/home.php';include 'home.php';include '/home' ;?

所以你在这里有一个基本路径问题。如果不了解更大的网站结构,很难知道如何处理。但这就是我建议你做的事情,让你的生活更轻松,现在和在将来。

首先,我建议使用include_once代替include,以避免脚本可能无意中尝试多次加载同一文件的情况。

include_once('home.php');

但我也鼓励你使用某种基本路径作为文件位置的前缀,这样你就不会经常处理相对位置。

例如,在主配置文件中,您可以像这样定义基本路径:

$BASE_PATH = '/the/path/to/the/codebase/';

然后当你执行include_once时,语法为:

include_once($BASE_PATH . 'home.php');

这样做的好处是,无论您的代码库嵌套多深,您都将始终固定在$BASE_PATH的值上。由于不必担心相对路径问题,您的生活将变得更轻松。

答案 3 :(得分:0)

重写网址后,您不需要更改文件的格式(如果包含)。如果您在项目的主目录中有a.php并在文件夹脚本中存档b.php,只需使用简单的方法将其包含在a.php中:

include 'scripts/b.php';