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文件实际路径和后缀名 的相关文章

  • URL 中的 %2F 中断并且未引用所需的 .php 文件 [重复]

    这个问题在这里已经有答案了 我需要将 作为变量作为 URL 的一部分传递 我的结构如下所示 www domain com listings page 1 city Burnaby South type Townhome bedroom 2
  • 如何使用 PHP 对字符串进行 rot13 处理?

    我有一个很大的 php 代码 我想手动对其进行编码和解码 我的问题是 php 代码里面有很多单引号和双引号 因此我在使用时出现错误str rot13 功能如下 那么正确的语法是什么以及如何使用下面的函数进行编码 str rot13 That
  • Laravel $request->file() 返回 null

    尝试在后端使用 Laravel 上传文件时遇到问题 Issue Laravel request gt file 方法返回 null Setup 我使用以下方法构建了一个 AJAX 请求超级代理人 https github com visio
  • 为什么我的会话仍然存在?

    我一定很愚蠢 因为似乎一件相当明显的事情现在让我完全困惑 我有一个会议 ie SESSION handbag id 在某个时刻 我需要彻底终止这个会话 ie at the start of the page session start el
  • 一种无需 JavaScript 即可在 PHP 中确定浏览器宽度的方法?

    首先有吗 或者我必须使用javascript 我希望能够更改使用的 CSS 因此 frex 我可以为移动设备或其他设备加载较小的字体 不幸的是 仅使用 PHP 无法检测用户分辨率 如果您使用 Javascript 则可以在 cookie 中
  • PHP 通过 SSL 连接到 MS SQL

    我想要实现的目标非常简单 我想通过安全连接从 PHP 脚本连接到外部 MS SQL 数据库 然而 这已被证明是有问题的 到目前为止 经过三个小时的研究 我不知所措 客户端的平台是Ubuntu 这意味着我无法使用SQLSRV 安全连接已经在不
  • PHP MongoDb 驱动程序:如何设置执行代码的超时

    我有以下代码 它在 MongoDb 端执行一段代码 mongoCode new MongoCode Some JS code db gt execute mongoCode array socketTimeoutMS gt 1000000
  • Yii2 - 错误请求 (#400) |前端和后端cookie

    仅当我打开时才会出现此问题frontend and backend在相同的browser 设想 与后端交互 gt 切换选项卡 gt 与前端交互 gt 切换选项卡返回 gt 与后端交互 gt 错误请求 400 Cookie 后端 identi
  • 是否可以将路由参数传递给 Laravel 中的控制器构造函数?

    是否可以将路由参数 或路由段 注入到控制器构造函数中 您找到一些代码来澄清我的问题 class TestController protected param public function construct paramFromRoute
  • PHP - 如何获取主要 HTML 内容,例如 Firefox 中的阅读器模式

    在 android Firefox 应用程序和 safari iPad 中 我们只能通过 阅读器模式 阅读主要内容 阅读更多 http support mozilla org en US kb how enable reader mode
  • 适用于 Linux 的轻量级 IDE [关闭]

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

    我有一个 CakePHP 应用程序 在某些时候会显示带有产品媒体 图片或视频 的视图 我想知道是否有某种方式可以包含另一个威胁视频或威胁图片的视图 具体取决于标志 我想将这些 小视图 用于其他几个目的 所以它应该 像 蛋糕组件一样 以便重用
  • 分页显示所有其他页面上第 1 页的相同帖子

    我最近在创建即将发生的事件列表时得到了很多帮助 请参阅此处显示即将举行的活动 包括今天的活动 https stackoverflow com questions 17343615 showing upcoming events includ
  • 覆盖 FOS 用户包中的“更改密码”模板

    我做了一些研究 遗憾的是找不到任何帮助 因此 我将 FOSUserBundle ChangePasswordAction 渲染到我的模板中 但它显示供应商提供的默认模板 我的渲染控制器的模板 block body h2 Einstellun
  • Laravel Vue 组件只能传递数字?

    在我的 UserMenu vue 中我写道 export default props nameVal data return 并在blade php中
  • Nginx 502 网关错误。通过增加buffer来解决。为什么?

    我正在设置 LEMP 堆栈来运行 Drupal 我安装了 Nginx 和 PHP FastCGI Nginx 工作正常 但任何运行 PHP 的尝试都会出现错误 502 Bad Gateway 谷歌很快发现 nginx 502 错误网关 ht
  • 使用其他聚合中的数据检查命令的有效性

    我目前正在开发我的第一个更大的 DDD 应用程序 目前来说 它运行得很好 但我们从早期就陷入了一个让我无法停止思考的问题 在我们的一些聚合中 我们保留对另一个聚合根的引用 这对于整个应用程序非常重要 基于它们的 ID 因此不存在硬引用 删除
  • php - 解析html页面

    div divbox div p para1 p p para2 p p para3 p table class table tr td td tr table p para4 p p para5 p 有人可以告诉我如何解析这个 html
  • Jquery一键提交多个同名表单

    我有动态创建的循环表单 我需要一键提交所有表单 我正在遵循下面的代码 你能建议我怎么做吗 谢谢
  • 矩形超出边界是什么意思

    PPB Graphics2D PaintImageData 矩形超出界限是什么意思 我几乎在我检查的每一段代码中都看到了它 最新的代码是 define my consumer key define my consumer secret oa

随机推荐