【问题标题】:Nginx rewrite problemNginx 重写问题
【发布时间】:2011-02-10 03:03:02
【问题描述】:

请求的每一个页面都被传递给“check.php”:

rewrite ^/(.*)$ http://localhost/check.php?page=$1

“check.php”验证几个安全的东西然后需要请求的页面:

<?php
    // ... security stuff

    require_once ($myRequestedPage);
?>

问题是,在 HTML 文件中,没有加载任何外部样式,只加载脚本:

<!doctype html>

<html>
    <head>
        <meta http-equiv="Content-Type" content="text/html; charset=utf-8" /> <!-- Do not load -->

        <link href="css.css" rel="stylesheet" type="text/css" /> <!-- Do not load -->

        <script src="js.js"></script> <!-- Load -->

        <style>
            @import url("css.css"); <!-- Do not load -->
        </style>

        <title></title>
    </head>

    <body></body>
</html>

有什么线索吗?谢谢。

【问题讨论】:

  • 样式表是否与请求的页面位于同一文件夹和同一级别?同样在一个不相关的说明中,由于您使用的是 HTML5 标准,因此您不需要关闭诸如 meta、link、br 等自闭标签。
  • 本题与javascript标签无关。

标签: php javascript html css nginx


【解决方案1】:

您目前是否关心通过 PHP header 命令为每个重写文件手动设置特定的 mime 类型? javascript、css 和 HTML 文件的 mime 类型不同。仅此一项就可能导致问题。

【讨论】:

    【解决方案2】:

    我建议您仅将不存在的文件的请求路由到 check.php。这可以防止对“style.css”的请求被重写为当前正在发生的 check.php。一切都被发送到 check.php(甚至是你的样式表)。

    # Route all requests for non-existent files to index.php
    if (!-e $request_filename) {
            rewrite ^/(.*)$ /check.php/$1 last;
    }
    
    # Pass PHP scripts to php-fastcgi listening on port 9000
    location ~ \.php {
            include fastcgi_params;
            fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
            fastcgi_pass 127.0.0.1:9000;
    }
    

    【讨论】:

    • 这也可能绕过现有的 PHP 文件(这可能是不希望的)。从重写中排除一些文件扩展名(css、js、jpg、png、...)可能是个好主意。
    【解决方案3】:

    我建议使用 Firebug:

    http://getfirebug.com/

    这样,您可以检查浏览器所看到的内容并尝试找出问题所在,这可能与路径(正如 Kyle 提到的)或标题(由于重写而发送的非文本/css 标题)有关) 或其他问题。

    检查下载的内容,您可以使用 CSS 选项卡,然后查看您希望下载的每个文件。如果您的浏览器无法获取该文件,您将看到一个错误。请参阅此屏幕截图的 all.css 部分:

    然后,您可以检查 Net 选项卡并查看 css 文件的标题/响应,以查看返回的内容,如下面的屏幕截图所示(尝试标题以查看 Content-Type 文本/css 是否正确:

    这是突出显示的标题内容类型:

    【讨论】:

      【解决方案4】:

      尝试在 CSS 链接之前添加 /:

      <link href="/css.css" rel="stylesheet" type="text/css" />
      

      如果这不起作用,请尝试:

      <link href="../css.css" rel="stylesheet" type="text/css" />
      

      看起来有点琐碎,但这些东西以前给我带来了类似的问题:)

      【讨论】:

        猜你喜欢
        • 2010-10-01
        • 1970-01-01
        • 2023-03-22
        相关资源
        最近更新 更多