Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/.htaccess/6.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
.htaccess重写规则与PHP是否包含或要求不工作?_Php_.htaccess_Mod Rewrite_Include - Fatal编程技术网

.htaccess重写规则与PHP是否包含或要求不工作?

.htaccess重写规则与PHP是否包含或要求不工作?,php,.htaccess,mod-rewrite,include,Php,.htaccess,Mod Rewrite,Include,我对编写干净的URL还不熟悉,尽管我对它们如何工作的猜测是正确的 我的第一步是创建一个兼容性工具来测试服务器上是否启用了mod_rewrite。我成功地创建了我需要的三个文件:PHP工具文件、.htaccess文件和要重写的文件URL 基本的重写规则已经就位,当我转到重写的URL时,它会成功地重定向。但是,在尝试使用PHP INCLUDE/REQUIRE甚至FILE_EXISTS函数引用重写的URL时,它返回失败。这是不可能的还是我走错了方向 如果必要的话,我很乐意发布代码(我是从智能手机上写的

我对编写干净的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 rewrite.php[nc]
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;
?>

Apache重写规则对
包括
要求
文件\u的存在没有任何影响,因为它们使用的是服务器上的路径,而不是url,除非启用
允许\u url\u fopen

编辑:
如果您只想检查服务器上是否有
mod_rewrite
,那就简单多了:使用。这很容易:

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

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

包含的
/
要求与URL重写有什么关系?您正在尝试包含URL吗?这通常在默认的PHP配置下被禁用。好吧,当
FILE\u存在时
没有返回它,我想我应该尝试使用
INCLUDE
并返回一个布尔变量。显然这不管用。谢谢;)也许发布一些代码会有所帮助,我仍然不知道您正在尝试做什么。当然……这里的目标是通过PHP测试当前服务器是否能够进行mod_重写。也许您希望在本质上使用,我使用它作为CMS的测试工具,可以放在任何服务器上。因此,我需要知道,如果启用了mod_rewrite,则不会永久更改任何Apache或PHP设置。当然有一种方法……当然。实际上很简单,只需使用
apache\u get\u模块
。有关详细信息,请参见我的编辑。仅供参考。仅限:使用mod_rewrite(和其他选项)限制对特定文件夹(或文件夹中的内容)的访问显然可以停止Ajax调用,或者使用JS的.load()函数加载html。这是我现在面临的问题,因此我认为应该有其他方法来处理限制,在现代应用程序中,经常使用js调用。