【问题标题】:CSS and JS not loading with mod_rewriteCSS 和 JS 不使用 mod_rewrite 加载
【发布时间】:2012-10-29 15:33:39
【问题描述】:

我正在使用 apache 的 mod_rewrite 模块将我的 URL 结构(例如,www.mydomainname.com/user.php?u=somename)改进为一些花哨的 URL,例如 www.mydomainname.com/user/somename。我已经成功地实现了它,直到我遇到 CSS 和 JS 相对路径问题的这种非常糟糕的情况。 每当我打开www.mydomainname.com/user/somename 时,它在没有CSS 和JS 的情况下成功加载,只有文本和基本的HTML。我使用了 chrome 的“检查元素”功能,它可以帮助我了解发生的以下错误。

GET http://www.mydomainname.com/user/css/style.css 404 (Not Found) somename:5
GET http://www.mydomainname.com/user/css/developer.css 404 (Not Found) somename:6
GET http://www.mydomainname.com/user/js/jquery-1.5.2.js 404 (Not Found) somename:7
GET http://www.mydomainname.com/user/js/jquery.form.js 404 (Not Found) somename:5

.htaccess 文件有以下内容-

DirectoryIndex index.html.php
RewriteEngine on
RewriteCond %{REQUEST_FILENAME} !-f
RewriteRule    ^user/([^/.]+)/?$    user.php?u=$1    [L]

user.php 位于父文件夹以及 CSS 和 JS 文件夹中。我知道了原因,但不知道如何消除错误。

EDIT:user.php文件中给出的CSS和JS的路径是-

<link type = "text/css" rel = "stylesheet" href = "css/style.css">
<link type = "text/css" rel = "stylesheet" href = "css/developer.css">
<script type="text/javascript" src="js/jquery-1.5.2.js"></script>
<script type="text/javascript" src="js/jquery.form.js"></script>

【问题讨论】:

    标签: php mod-rewrite


    【解决方案1】:

    您无需担心。您可以从 apache 打开“httpd.conf”文件。并从下面的行中删除哈希。

    例子:

    #LoadModule rewrite_module modules/mod_rewrite.so
    

    改变它:

    LoadModule rewrite_module modules/mod_rewrite.so
    

    【讨论】:

    • 我认为这已经被视为命令而不是注释掉的块。这就是为什么它甚至可以工作。我只是想知道如何修改根据 url 输出 css 文件的输出?
    • 我发现在上面的评论中你写到“css 和 js”文件夹在根目录中。如果是这样,那么您只需要如下 URL(从 URL 中删除用户):mydomainname.com/css/style.css 404(未找到)
    【解决方案2】:

    试试

     DirectoryIndex index.html.php
     RewriteEngine on
     RewriteCond %{REQUEST_FILENAME} !-f
     RewriteCond %{REQUEST_FILENAME} !-d
     RewriteRule    ^user/([^/.]+)/?$    user.php?u=$1    [L]
    

    我相信您允许请求文件但不允许请求目录。 JS/CSS 文件位于子目录中。

    // 更新 您使用的相对路径是问题所在。

    您为路径粘贴的代码基本上是在当前文件夹的子文件夹中查找此 css 文件。子文件夹不存在,所以报错。

    将您的代码更改为以下内容。

    <link type = "text/css" rel = "stylesheet" href = "/css/style.css">
    <link type = "text/css" rel = "stylesheet" href = "/css/developer.css">
    <script type="text/javascript" src="/js/jquery-1.5.2.js"></script>
    <script type="text/javascript" src="/js/jquery.form.js"></script>
    

    这将转换为从根文件夹中查找文件。

    【讨论】:

    • 试过了,但不幸的是得到了和以前一样的结果。问题是 user.php 中给出的 css 路径是相对的。我将编辑我的问题,让您知道路径,这些路径也在修改中。
    • 我看到了更新。文件物理位置在哪里?在用户或根目录的子文件夹中?
    • 我只是在寻找是否有任何方法可以像加载 user.php?u=somename 一样加载 user/somename url 上的输出。虽然,user.php?u=somename 在加载所有 CSS 和 JS 时都能完美运行,但为什么不使用 /user/somename
    • user 不是一个目录,它是一个 PHP 文件。 CSS 和 JS 文件夹位于所有文件(index.html.php、user.php)所在的根目录中。
    【解决方案3】:

    尝试添加绝对路径(只需在 URL 开头添加/):

    <link type = "text/css" rel = "stylesheet" href = "/css/style.css">
    <link type = "text/css" rel = "stylesheet" href = "/css/developer.css">
    <script type="text/javascript" src="/js/jquery-1.5.2.js"></script>
    <script type="text/javascript" src="/js/jquery.form.js"></script>
    

    【讨论】:

    • 哇,非常感谢您指出我的这个小错误。我没有查到这个。但是一个基本的事情仍然是问题。我现在使用来自 user.php 页面的 ajax 从 userdetail.php 请求用户数据,userdetail.php 位于 user.php 所在的同一目录中,但它正在向路径 user/userdetail.php 发出 POST 请求而不是 userdetail.php
    • @AshutoshChaudhary 好吧,你必须做和以前一样的事情...而不是发帖到userdetail.php 发帖到/userdetail.php
    猜你喜欢
    • 2012-07-21
    • 2015-04-09
    • 2015-09-28
    • 2017-08-10
    • 1970-01-01
    • 2013-09-19
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多