0

我的 php 项目有以下结构:

- classes
    - model.php
- views
    - header.php
    - footer.php
    - user.php
- resources
    - css
        - stylesheet.css
    - js
        - my_javascript.js
- index.php
- controller.php

.htaccess 文件

RewriteEngine On
RewriteRule ^/?resources/(.*)$ resources/$1 [L]
RewriteRule ^([a-zA-Z]+)/?([a-zA-Z0-9/]*)$ index.php?page=$1&query=$2 [L]

头文件.php

<!DOCTYPE html>
<html>
    <head>
       <!-- Styles -->
       <link href="resources/css/stylesheet.css" rel="stylesheet" media="screen">
    </head>
    <body>

问题,正如许多其他人之前在 stackoverflow 上提到的(但他们的解决方案对我不起作用),是我目前通过 index.php 重定向所有页面,因此甚至我的资源文件,例如 stylesheet.css。

1:当我要求时,mydomain/user我会用正确的 css ( mydomain/resources/css/stylesheet.css)加载正确的资源

2:但是当我试图使应用程序成为 RESTful 时,我有一个页面mydomain/user/4,当我提出这样的请求时,我的 css 突然没有加载。查看它正在寻找的 http 请求 ( mydomain/user/resources/css/stylesheet.css)

我试图通过包含来解决它$_SERVER['DOCUMENT_ROOT']。它不起作用,而且似乎不是一个“好”的解决方案。谢谢你的帮助。是的,我是 php 的新手!

4

2 回答 2

1

由于您要屏蔽 URL,并且实际脚本运行在与 URL 中不同的文件夹结构上,因此您必须提供您在程序中引用的 CSS、图像、Javascript 等的完整路径。

您可以将代码更改为以下

<link href="http://www.yourdomainname.com/resources/css/stylesheet.css" rel="stylesheet" media="screen">

或使用文件的相对路径

<link href="/resources/css/stylesheet.css" rel="stylesheet" media="screen">

由于我们/在文件路径的开头使用,服务器将从网站的根工作目录中查找文件。

除此之外,您应该在 htaccess 文件中添加条件,如下所示

RewriteCond %{REQUEST_FILENAME} !(resources|img|anyother folders that you want to ignore|anyother folders that you want to ignore|...)
RewriteRule ^([a-zA-Z]+)/?([a-zA-Z0-9/]*)$ index.php?page=$1&query=$2 [L]

RewriteRule ^/?resources/(.*)$ resources/$1 [L]我希望您在进行这些更改后不需要在 htaccess 中

于 2013-06-29T05:38:35.183 回答
0

由于 htaccess 中的更改不起作用,因此我使标头加载了绝对路径,而不是像这样

$http_host = $_SERVER['HTTP_HOST'];
$file_path = $_SERVER['PHP_SELF'];
$info = pathinfo($file_path);
$root_path = "http://" . $http_host . $info['dirname']; 
$path = $root_path . "/resources/css/stylesheet.css";

我希望这可以帮助其他有同样问题的人......

于 2013-07-02T10:42:38.447 回答