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


URL Rewriting adding slash at the end breaks my css links

我使用Apache mod_rewrite重写我的url在一个PHP应用程序。我有一个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的东西,因为我正在学习这一切,我很想知道为什么这种行为发生?

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

你需要改变你所有的链接到绝对的url(与前导/)或指定一个相对的基本URI在页面的标题(在<head> </head>标签):

<base href="/" />

一种方法是有一个新的重定向规则来删除尾斜杠,然后你的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/" />

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