URL重写在末尾添加斜杠会破坏我的css链接

Posted

技术标签:

【中文标题】URL重写在末尾添加斜杠会破坏我的css链接【英文标题】:URL Rewriting adding slash at the end breaks my css links 【发布时间】: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 文件。实际上我已经使用这些链接开发了整个应用程序,现在更改意味着更改所有文件。 【参考方案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 是我的站点名称所有文件夹都驻留在其中 让我们continue this discussion in chat。 检查更新的答案,如果您仍有问题,请加入我发送的聊天链接。

以上是关于URL重写在末尾添加斜杠会破坏我的css链接的主要内容,如果未能解决你的问题,请参考以下文章

带有斜杠的 mod_rewrite 会破坏 CSS/IMG/SCRIPTS 路径

网址重写破坏了指向 css 的链接

URL末尾处的斜杠“/”

url 编码的正斜杠破坏了我的 codeigniter 应用程序

nginx 重写URL尾部斜杠

自动添加的 URL 末尾的 AFNetworking 斜杠