【问题标题】:Location of resources regardless of the url (.htaccess url rewrite)不考虑 url 的资源位置(.htaccess url 重写)
【发布时间】:2014-12-22 14:58:36
【问题描述】:

我最近开始使用 .htaccess url 重写,目前我遇到了问题。

我的文件夹架构是这样的:

  • index.php
  • .htaccess
  • 图片/
  • css/
  • js/
  • 函数/

我的网站通过执行加载所有页面

index.php?page=register

我的页面在功能图中的位置。

问题是当我把它放在我的 .htaccess 中时

RewriteEngine On # Turn on the rewriting engine
RewriteRule ^register/?$ index.php?page=register [NC,L] # Handle login page request
RewriteRule ^profile/([0-9]+)/?$ index.php?page=profile&member_id=$1 [NC,L] # Handle profile page request

当我导航到

<website>/register/

我的 CSS 文件位于

../css/style.css

但是当我导航到

<website>/profile/1/

我的 css 文件位于

../../css/custom.css

我如何确保页面总是从

加载我的文件
css/custom.css

是否有一个变量提到了 index.php 的位置?这样我就可以了

<link rel="stylesheet" type="text/css" href="<?= $variable ?>/css/custom.css" />

我在 Windows 上使用 XAMPP(最新版本),该网站将在基于 Linux 的网络服务器上发布。

如果您需要有关我的实现的更多信息,而我现在想不出来,我会分享。

【问题讨论】:

  • 修改 .htaccess 以将所有对 css 的请求重定向到您的 css 目录。我认为您还需要添加 RewriteCond。

标签: php html .htaccess


【解决方案1】:

有两种方法可以解决这个问题:

  1. 在您的 css、js、图像文件中使用绝对路径而不是相对路径。这意味着您必须确保这些文件的路径以 http:// 或斜杠 / 开头。

  2. 您也可以尝试在页面的 HTML 标头中添加:&lt;base href="/" /&gt;,以便从该 URL 而非当前 URL 解析每个相对 URL。

【讨论】:

  • 感谢您的解决方案。我喜欢这个解决方案,因为如果您移动文件夹,它只需要编辑 1 行。
【解决方案2】:

如果您的网站位于 basedir 中,例如http://example.com/ 然后就做

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

如果它位于像 http://example.com/mysite/ 这样的子目录中,那么您必须将其添加到您的路径中

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

您应该将以下内容添加到您的.htaccess

RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d

如果文件存在,这将“忽略”重写规则,以便加载您的 css。

【讨论】:

  • 感谢您的解决方案。奇迹般有效。我更喜欢 anubhava 的答案,因为我的文件夹位于子目录中,并且 的使用只需要一行来编辑。仍然非常感谢您帮助我。
猜你喜欢
  • 1970-01-01
  • 2016-12-08
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2015-02-18
相关资源
最近更新 更多