我是编写干净URL的新手,尽管我对它们如何工作的有根据的猜测是正确的。
我的第一步是创建一个兼容性工具来测试服务器上是否启用了mod_rewrite。我成功地创建了我需要的三个文件:PHP 工具文件、.htaccess 文件和要重写的文件 URL。
一个基本的重写规则已经到位,当我转到重写的 URL 时,它成功重定向。但是,在尝试使用 PHP INCLUDE/REQUIRE 甚至 FILE_EXISTS 函数引用重写的 URL 时,它会返回失败。这是不可能的还是我走错了路?
如有必要,我很乐意发布代码(我正在智能手机上编写此代码),但现在我仍在尝试确定它是否可能以及如果是这样,实现它的最佳方法是什么。
.htaccess:
<IfModule mod_rewrite.c>
RewriteEngine on
RewriteRule .*rewrite_test.php rewrite.php [nc]
</IfModule>
重写.php:
<?php
$mod_rewrite = TRUE;
echo "test";
?>
测试仪.php:
<?php
// Check if APACHE MOD_REWRITE is enabled for clean URLs
$mod_rewrite = file_exists('rewrite_test.php');
echo ($mod_rewrite ? "TRUE" : "FALSE");
?>
或测试.php代码替代:
<?php
// Check if APACHE MOD_REWRITE is enabled for clean URLs
$mod_rewrite = FALSE;
include_once('rewrite_test.php');
echo $mod_rewrite;
?>
Apache 重写规则对include
、require
或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())
);
htaccess代表超文本访问:它只会影响HTTP请求,而不会影响本地服务器请求。正如 Oezi 所提到的,您可以使用 cURL 或 allow_url_fopen 标志将您的请求转换为真正的 HTTP 请求,但我建议不要这样做,因为这意味着您正在采取非常迂回的路线来访问您想要包含的页面。如果只是为了测试您的.htaccess配置,这不是问题,或者您可以在浏览器中打开URL。