1

我是编码 Clean URL 的新手,尽管我对它们如何工作的有根据的猜测是正确的。

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

一个基本的 RewriteRule 已经到位,当我转到重写的 URL 时,它会成功重定向。但是,在尝试使用 PHP INCLUDE/REQUIRE 甚至 FILE_EXISTS 函数来引用重写的 URL 时,它会返回失败。这是不可能的,还是我走错了路?

如有必要,我很乐意发布代码(我正在用我的智能手机编写此代码),但现在我仍在尝试确定它是否有可能,如果可以,最好的方法是什么。

.ht 访问:

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

重写.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;
?>
4

2 回答 2

2

Apache Rewrite Rules 对 没有任何影响includerequire或者file_exists因为那些使用服务器上的路径,而不是 URL,除非您启用allow_url_fopen指定完整的 URL

编辑:
如果您只想检查mod_rewrite您的服务器上是否可用,那就更容易了:使用apache-get-modules(). 这很简单:

$mod_rewrite = (
        function_exists('apache_get_modules') &&
        in_array('mod_rewrite', apache_get_modules())
    );
于 2012-06-20T12:57:08.750 回答
0

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

于 2012-06-20T13:12:05.393 回答