【问题标题】:URL Rewriting adding slash at the end breaks my css linksURL重写在末尾添加斜杠会破坏我的css链接
【发布时间】:2015-10-19 05:29:31
【问题描述】:

我正在使用 Apache mod_rewrite 在 PHP 应用程序中重写我的 url。 我的应用程序根目录中有一个 login.php。 我在 .htaccess 文件中写了以下几行(我正在使用 HTML5 样板的 htaccess):

<IfModule mod_rewrite.c>
    RewriteEngine On
    RewriteRule  ^signin/?$  login.php
</IfModule>

在名称末尾添加一个斜杠 ^signin/?$ 会破坏该页面的所有 css 链接。

我在那里使用 css 的相对链接,例如:

<link href="css/bootstrap-reset.css" rel="stylesheet">

我对 URL 重写和 htaccess 的东西非常陌生,因为我正在学习这一切,所以我很想知道为什么会发生这种行为?

【问题讨论】:

  • 你试过绝对网址吗? &lt;link href="/css/bootstrap-reset.css" rel="stylesheet"&gt;你说它破坏了css链接是什么意思?
  • 当我说断开链接时,这意味着除了 html 之外没有加载任何 css 文件。实际上我已经使用这些链接开发了整个应用程序,现在更改意味着更改所有文件。

标签: php css apache .htaccess mod-rewrite


【解决方案1】:

使用&lt;base href="base link" /&gt; 这将设置links,img 基本上所有的基础。这将修复链接。示例:&lt;base href="/" /&gt;

【讨论】:

  • 是的。这应该在头脑中的一切之上。因为它设置了路径的“基础”。
  • 在我的 login.php 中,我有两种基础。一个是 css/style.css 另一个是 dashboard/somefile.css 那么基础应该是什么?
  • 您现在使用相对路径,因此它可以通过以下方式工作:`
【解决方案2】:

当您的浏览器转到 http://example.com/signin/ 时,相对基本 URI 将变为 /signin/。这意味着整个页面内容中的每个相对链接都将附加/signin/ 作为URL 基础。原始链接只是/login.php,这使得基本URI 为/。您的浏览器对您的重写规则一无所知,只知道它在地址栏中看到的内容。

您需要将所有链接更改为绝对 URL(以 / 开头)或在页面标题中指定相对基本 URI(在 &lt;head&gt; &lt;/head&gt; 标签内):

<base href="/" />

【讨论】:

  • 在我的 login.php 中,我有两种基础。一个是 css/style.css 另一个是 dashboard/somefile.css 那么基础应该是什么?
  • @SubhanAhmed 您的 CSS 文件的相对根 URL 路径是什么?
  • 在根目录下,我有 css,其中有 css 文件,而且我有仪表板,其中还有 css 文件夹
  • @SubhanAhmed 在所有这些情况下,基本 URI 仍然只是 /
  • 但是这个 在我的情况下没有任何区别
【解决方案3】:

一种方法是有一个新的重定向规则来删除斜杠,然后你的 css/js 就不会有问题了:

RewriteEngine On
RewriteBase /apx/

# remove trailing slash from non-directories
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule ^(.+?)/$ $1 [NE,R=302,L]

RewriteRule ^signin/?$ login.php [L,NC]

但也可以考虑为 css/js 使用绝对路径,例如

<link href="/css/style.css" rel="stylesheet">

或者,您可以在页面 HTML 的 &lt;head&gt; 部分添加:

<base href="/apx/" />

【讨论】:

  • 这个规则已经存在于样板文件的 htaccess 中:RewriteCond %{SCRIPT_FILENAME} -d [OR] RewriteCond %{SCRIPT_FILENAME} -f RewriteRule "(^|/)\." - [F] 没用
  • apx 是我的站点名称所有文件夹都驻留在其中
  • 检查更新的答案,如果您仍有问题,请加入我发送的聊天链接。
猜你喜欢
  • 1970-01-01
  • 2017-05-05
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2021-03-09
  • 1970-01-01
  • 2013-11-08
  • 1970-01-01
相关资源
最近更新 更多