WAMP环境隐藏PHP文件实际路径和后缀名

2023-11-16

有时候做客户端开发阶段得测试,需要一个模拟服务器的环境,我使用得最顺手得还是WAMP环境。后台给出的api接口的路径千奇百怪,在WAMP环境中如何模拟这些路径呢,如何将某个路径下的PHP文件映射到另一个URL路径下并隐藏PHP文件后缀呢,在此小小的总结一下。

实现上面重新映射路径的需求,我们使用PHP中的HTTP重写技术,让符合特定正则表达式的URL,交由某个特定的PHP脚本处理。

.htaccess是一个完整的文件名(只有后缀),它是用于Apache服务器下的配置文件,当.htaccess文件放在某一文件夹下,它仅对该文件夹下的文件和文件夹有效。通过.htaccess文件,可以配置服务器实现很多功能,比如错误定位,密码保护,IP拒绝,URL重写等等。
默认的Apache不支持.htaccess,需要修改Apache的配置文件httpd.conf,才能使得.htaccess有效。

配置方法:

(1)找到apache的安装目录下的conf下的httpd.conf文件,打开文件修改

LoadModule rewrite_module modules/mod_rewrite.so 这行代码,它前面有个#号,把#号删掉

(2)还是在httpd.conf文件中,找到如下的配置,把None改为All(节点可能有多个,修改和PHP路径相关的那个)

<Directory "E:/php/workspace">
    Options Indexes FollowSymLinks
    AllowOverride None
    Require all granted
</Directory>

 在我自己的环境中配置如下所示

<Directory "D:/wamp/www">

    #
    # Possible values for the Options directive are "None", "All",
    # or any combination of:
    #   Indexes Includes FollowSymLinks SymLinksifOwnerMatch ExecCGI MultiViews
    #
    # Note that "MultiViews" must be named *explicitly* --- "Options All"
    # doesn't give it to you.
    #
    # The Options directive is both complicated and important.  Please see
    # http://httpd.apache.org/docs/2.2/mod/core.html#options
    # for more information.
    #
    Options Indexes FollowSymLinks

    #
    # AllowOverride controls what directives may be placed in .htaccess files.
    # It can be "All", "None", or any combination of the keywords:
    #   Options FileInfo AuthConfig Limit
    #
    AllowOverride all

    #
    # Controls who can get stuff from this server.
    #
#   onlineoffline tag - don't remove
    Order Allow,Deny
    Allow from all

</Directory>

(3)重启WAMP

(4)在项目目录下创建.htaccess文件,并在里面写配置,简单的例子如下:

www文件夹下所有文件列表:

.htaccess文件内容

RewriteEngine on                       //on为打开,off为关闭

RewriteRule ^hello/api/student$ /php/student.php
RewriteRule ^hello/image/image$ /php/image.php

ErrorDocument 404 /php/404.php

/php/student.php源码

<html>
<head>
  <meta http-equiv='Content-Type' content='text/html; charset=utf-8' />
</head>
<body>
<?php
  echo "获取页面传来的参数";
  $studentId=null;
  if(isset($_GET["student_id"]))
  {
      $studentId=$_GET["student_id"];
  }
  
  echo "学生ID: ".$studentId."<br>";
  
  // 从文件中读取数据到PHP变量 
  $json_string = file_get_contents($_SERVER["DOCUMENT_ROOT"]."/json/students.json"); 
   
  // 用参数true把JSON字符串强制转成PHP数组 
  $data = json_decode($json_string, true); 
   
  // 显示出来看看 
  // var_dump($json_string); 
  // var_dump ($data); 
  // print_r($data); 
  //产品循环
  function getName($d, $stuId)
  {
    foreach ($d["students"] as $key => $value) {  //遍历students中的对象
      if($key == $stuId){
        return $value["name"];
      } 
    }
  }

  function getAge($d, $stuId)
  {
    if(empty($d["students"][$stuId]["age"]))
    {
      return -1;
    }
    return $d["students"][$stuId]["age"];
  }

  function getStudentJson($d, $stuId)
  {
    $stu=$d["students"][$stuId];
    if(empty($stu))
    {
      return "";
    }
    else
    {
      return json_encode($stu);
    }
  }

  echo "学生名: ".getName($data, $studentId)."<br>";
  echo "学生年龄: ".getAge($data, $studentId)."<br>";
  echo "学生JSON: ".getStudentJson($data, $studentId)."<br>";
?>
</body>
</html>

/php/image.php源码

<?php

/*
 * php 页面直接输出图片
 */
function showImg($img){
	$info = getimagesize($img);
	$imgExt = image_type_to_extension($info[2], false);  //获取文件后缀
	$fun = "imagecreatefrom{$imgExt}"; //需要php_gd2模块支持(进入php.ini 找到extension=php_gd2.dll,将其前面的 ‘;’ 去掉即可)
	$imgInfo = $fun($img); 	//1.由文件或 URL 创建一个新图象。如:imagecreatefrompng ( string $filename )
	$mime = image_type_to_mime_type(exif_imagetype($img)); //获取图片的 MIME 类型
	header('Content-Type:'.$mime);  //需要php_exif模块支持(进入php.ini 找到extension=php_exif.dll,将其前面的 ‘;’ 去掉即可)
	$quality = 100;
	if($imgExt == 'png') $quality = 9;		//输出质量,JPEG格式(0-100),PNG格式(0-9)
	$getImgInfo = "image{$imgExt}";
	$getImgInfo($imgInfo, null, $quality);	//2.将图像输出到浏览器或文件。如: imagepng ( resource $image )
	imagedestroy($imgInfo);
}

showImg($_SERVER["DOCUMENT_ROOT"]."/image/image.jpg")

?>

/php/404.php源码

<html>
<head>
  <meta http-equiv='Content-Type' content='text/html; charset=utf-8' />
</head>
<body>
<?php
    echo "对不起,您访问的资源不存在!";
?>
</body>
</html>

运行效果如下:

(------------------------完-----------------------------)

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

WAMP环境隐藏PHP文件实际路径和后缀名 的相关文章

  • 在 Laravel 中记录用户操作

    我正在尝试将用户执行的所有操作 登录 注销 CRUD 记录到我的数据库中的日志表中 并且从我所看到的事件看来是执行此操作的正确方法 我添加了一个did action User 模型的方法 它将给定用户的操作记录到数据库中 这是我到目前为止所
  • 值得学习的优秀 Zend Framework 示例应用程序 [关闭]

    就目前情况而言 这个问题不太适合我们的问答形式 我们希望答案得到事实 参考资料或专业知识的支持 但这个问题可能会引发辩论 争论 民意调查或扩展讨论 如果您觉得这个问题可以改进并可能重新开放 访问帮助中心 help reopen questi
  • 从多行中选择数据并对其进行排序[重复]

    这个问题在这里已经有答案了 id title content class 1 t1 p1 1 2 t2 p6 1 3 t3 p5 2 4 t4 p8 3 对于这个表 我如何使用 1 个查询来SELECT所有课程DISTINCTLY变成这个
  • vcruntime140.dll 14.0 与 PHP 版本不兼容

    我已经下载了PHP 7 4 1 NTS vc15 x86在 Windows Server 2016 计算机上 我也下载并安装了vc redist x86 exe 当我尝试跑步时php cgi从命令提示符我收到以下错误 PHP 警告 vcru
  • PHP/HTML 添加删除按钮

    我有下面的代码来从数据库中检索行 其中用户名列与基本目录名称匹配 username basename dirname FILE username mysql real escape string username result mysql
  • Php - 您的 PHP 安装似乎缺少 WordPress 所需的 MySQL 扩展

    如何修复下面的错误 您的 PHP 安装似乎缺少 WordPress 所需的 MySQL 扩展 我使用带有 telnet 连接的 NAS 我安装了FFP 0 7 My php ini is in ffp etc php ini我取消了我认为有
  • PHP如何使用“ XML 中的实体与 DOMdocument

    我正在修改由其他库生成的 XML 文件的内容 我正在使用 PHP 5 3 10 进行一些 DOM 修改并重新插入替换节点 我正在使用的 XML 数据有 quot 在进行操作之前的元素 我想保留这些元素http www w3 org TR R
  • 多维数组上的数组合并

    要么我是瞎子 要么我在任何地方都找不到这个问题 昨天我在合并数组时遇到了问题 我可以在 SO 的帮助下解决这个问题 今天 我再次遇到了合并数组的问题 但这一次是多维数组 我有一个数组 usergroup groups 和一个数组 userg
  • Jekyll 在子网站上生成静态网站?

    是否可以将 Jekyll 放在 GitHub 上托管的网站的单个部分上 即是否可以让 example github io 成为常规站点 而 example github io blog 由 Jekyll 静态生成 我相信可以通过创建另一个名
  • 如何用PHP制作下载链接? [关闭]

    很难说出这里问的是什么 这个问题是含糊的 模糊的 不完整的 过于宽泛的或修辞性的 无法以目前的形式得到合理的回答 如需帮助澄清此问题以便重新打开 访问帮助中心 help reopen questions 我可以使用 sql 在数据库中上传文
  • 在 yii2 gridview 中输入时进行过滤

    我需要在您键入时过滤网格视图 默认情况下 仅当按下回车键时才进行过滤 您应该使用自己的 js 来处理这个问题 例如 this gt registerJs body on keyup yiiGridView grid id filters i
  • 调用未定义的函数 mcrypt_decrypt() - 即使安装了 php5-mcrypt

    所以我无法停止收到错误 PHP Fatal error Call to undefined function mcrypt decrypt in 即使我安装了 php5 mcrypt 我也重新安装了 php 好几次 但我无法让它工作 更多信
  • 使用正则表达式在图像标签周围添加链接

    我想使用 preg replace 在图像标签周围添加链接 Before img href src alt After a href img href src alt a 我将非常感谢任何帮助 非常感谢 这有帮助吗 str img href
  • 不在对象上下文中时使用 $this php

    我刚刚开始学习 php 中的 OOPS 我写了一个简单的程序来实现继承 当不在对象上下文中时 我收到 this 的致命错误 谁能解释一下这个错误 它是什么意思 这是我的代码
  • Cookie 不会重置

    好吧 我被难住了 我已经盯着这个看了好几个小时了 我使用以下代码在 access login php 设置 cookie setcookie username username time 604800 当我尝试注销 位于 access lo
  • 如何默认清空除国家/地区以外的所有 WooCommerce 结帐字段?

    在我的 WooCommerce 结帐页面上 我希望除帐单国家 地区之外的帐单字段为空白 我用它来确保结账表格在填写时是空白的 add filter woocommerce checkout get value return empty st
  • 使用 PHP 的 HTML 中的选项字段

    我想根据从下拉列表中选择的区域名称搜索员工列表 我可以将数据库中的区域名称检索到 PHP HTML 的下拉列表中 但现在我很困惑如何将下拉列表中的选定选项传递给 PHP 中的 SQL 查询 我还想要索引号 选定的选项 我的代码如下
  • 使用 PHP 连接到 Amazon RDS

    我正在尝试将 RDS 实例与 PHP 连接文件连接 这是我的文件中的内容 define DB SERVER localhost define DB USERNAME User Name define DB PASSWORD Password
  • Ruby On Rails - 在控制器中使用关注点

    可能的菜鸟警告 刚接触 RoR 我正在尝试在 RoR 中使用关注点 现在我只写了一个非常简单的问题 app controllers concerns foo rb module Foo extend ActiveSupport Concer
  • 绕过带index.php和不带index.php的url的htpasswd身份验证

    我已经使用 htaccess 文件添加了 htpasswd 保护进行身份验证 现在我想绕过身份验证www website com and www website com index php其中两个 url 都在访问 index php 文件

随机推荐