.htaccess RewriteRule与PHP INCLUDE或REQUIRE无法正常工作?

时间:2012-06-20 12:24:00

标签: php .htaccess mod-rewrite include

我不熟悉编写清洁网址的代码,尽管我对他们工作方式的猜测是正确的。

我的第一步是创建一个兼容性工具来测试服务器上是否启用了mod_rewrite。我成功地创建了我需要的三个文件:PHP工具文件,.htaccess文件和要重写的文件URL。

基本的RewriteRule到位,当我转到重写的URL时,它成功重定向。但是,在尝试使用PHP INCLUDE / REQUIRE或甚至FILE_EXISTS函数引用重写的URL时,它返回失败。这是不可能的还是我以错误的方式解决这个问题?

如果有必要,我会很乐意发布代码(我是从我的智能手机上写的),但是现在我仍在尝试确定它是否可行,如果是这样的话,最好的方法就是完成它。

htaccess的:

<IfModule mod_rewrite.c>
  RewriteEngine on
  RewriteRule .*rewrite_test\.php rewrite.php [nc]
</IfModule>

rewrite.php:

<?php
  $mod_rewrite = TRUE;
  echo "test";
?>

tester.php:

<?php
  // Check if APACHE MOD_REWRITE is enabled for clean URLs
  $mod_rewrite = file_exists('rewrite_test.php');

  echo ($mod_rewrite ? "TRUE" : "FALSE");
?>

或tester.php代码替代:

<?php
  // Check if APACHE MOD_REWRITE is enabled for clean URLs
  $mod_rewrite = FALSE;
  include_once('rewrite_test.php');
  echo $mod_rewrite;
?>

2 个答案:

答案 0 :(得分:2)

Apache重写规则对includerequirefile_exists没有任何影响,因为它们使用服务器上的路径,而不是URL,除非您启用allow_url_fopenspecify a full URL

修改
如果您只是想检查服务器上是否有mod_rewrite,那就更容易了:使用apache-get-modules()。它很简单:

$mod_rewrite = (
        function_exists('apache_get_modules') &&
        in_array('mod_rewrite', apache_get_modules())
    );

答案 1 :(得分:0)

.htaccess代表超文本访问:它只会影响HTTP请求,而不会影响本地服务器请求。正如Oezi所提到的,您可以使用cURL或allow_url_fopen标志将您的请求转换为真正的HTTP请求,但我建议不要这样做,因为这意味着您正在采用非常迂回的路径到您想要包含的页面。如果只是为了测试你的.htaccess配置不是问题,或者你只需​​在浏览器中打开URL。