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 的东西非常陌生,因为我正在学习这一切,所以我很想知道为什么会发生这种行为?
【问题讨论】:
你试过绝对网址吗?<link href="/css/bootstrap-reset.css" rel="stylesheet">
你说它破坏了css链接是什么意思?
当我说断开链接时,这意味着除了 html 之外没有加载任何 css 文件。实际上我已经使用这些链接开发了整个应用程序,现在更改意味着更改所有文件。
【参考方案1】:
使用<base href="base link" />
这将设置links
,img
基本上所有的基础。这将修复链接。示例:<base href="/" />
【讨论】:
是的。这应该在头脑中的一切之上。因为它设置了路径的“基础”。 在我的 login.php 中,我有两种基础。一个是 css/style.css 另一个是 dashboard/somefile.css 那么基础应该是什么? 您现在使用相对路径,因此它可以通过以下方式工作:`当您的浏览器转到 http://example.com/signin/
时,相对基本 URI 将变为 /signin/
。这意味着整个页面内容中的每个相对链接都将附加/signin/
作为URL 基础。原始链接只是/login.php
,这使得基本URI 为/
。您的浏览器对您的重写规则一无所知,只知道它在地址栏中看到的内容。
您需要将所有链接更改为绝对 URL(以 /
开头)或在页面标题中指定相对基本 URI(在 <head> </head>
标签内):
<base href="/" />
【讨论】:
在我的 login.php 中,我有两种基础。一个是 css/style.css 另一个是 dashboard/somefile.css 那么基础应该是什么? @SubhanAhmed 您的 CSS 文件的相对根 URL 路径是什么? 在根目录下,我有 css,其中有 css 文件,而且我有仪表板,其中还有 css 文件夹 @SubhanAhmed 在所有这些情况下,基本 URI 仍然只是/
。
但是这个 一种方法是有一个新的重定向规则来删除斜杠,然后你的 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 的 <head>
部分添加:
<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 路径