gpt4 book ai didi

debugging - 如何调试mod_rewrite规则?

转载 作者:行者123 更新时间:2023-12-04 13:54:00 27 4
gpt4 key购买 nike

这是“我自己问问题并回答”的情况,我发此帖是为了让遇到相同问题的任何人受益。

在共享服务器上的.htaccess文件中调试mod_rewrite规则集时遇到一些问题,我什至无法访问Apache错误日志。我找到了一种调试它们的巧妙方法,这是:

  • 写一个简短的脚本,简单地打印出它的querystring变量。例如在PHP中:
    <?='<pre>',htmlentities(print_r($_GET,true)),'</pre>'?>

    是你所需要的全部。
  • 假设您将此脚本命名为“show.php”,并将其放在/public_html中。然后在您的.htaccess文件中,在规则集中确定您认为可能引起问题的点,然后插入以下规则:
    RewriteRule (.*) /show.php?url=$1 [END]

  • 效果与在常规程序中插入PRINT语句相同。它会让您知道(a)您已达到规则集中的这一点,并且(b)当前重写的URL是什么。

    它不像真正的调试工具那样快,但是可以完成工作。

    如果您使用的是Apache <2.3.9,则必须使用 [L]而不是 [END]。在这种情况下,需要注意的是您的规则集不应尝试将“/show.php”重写为其他任何内容。如果存在问题,则可以通过在最顶部添加此规则来解决此问题:
    RewriteRule ^show.php$ - [L]

    ...只需记住在完成调试后将其删除!

    最佳答案

    很有帮助的见解。多年以来,我一直在尝试找出如何调试mod_rewrite规则,而无需具有root用户访问权限,并且不必将规则放在httpd.conf中。做到了!

    您的PHP有一个小错误:

    <?='<pre>',htmlentities(print_r($_GET),true),'</pre>'?>

    在此代码中,print_r()将$ _GET中的所有内容输出到stdout,然后返回值true,htmlentities()将其用作第一个参数。 htmlentities()也接收原义true作为第二个参数,这是一个可选参数,它告诉htmlentities()是否使用单引号和/或双引号。

    我认为您的意图是:
    <?='<pre>',htmlentities(print_r($_GET, true)),'</pre>'?>

    这告诉print_r()格式化$ _GET中的所有内容。将true作为第二个参数传递给print_r()告诉它不要将结果输出到stdout,而是将结果放入字符串中,然后将该字符串作为print_r()的返回值返回。然后htmlentities()将该字符串作为其一个输入参数,并进行适当的替换以强制浏览器按原样显示该字符串,而不是允许浏览器解释该字符串。例如。 --
    <i>text</i>

    会被翻译成:
    &lt;i&gt;text&lt;/i&gt;

    这将导致浏览器显示:
    <i>text</i>

    而不是用斜体显示单词“text”:

    文本

    关于debugging - 如何调试mod_rewrite规则?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7806916/

    27 4 0
    Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
    广告合作:1813099741@qq.com 6ren.com