URL重写最后添加斜杠会破坏我的css链接

时间:2015-07-28 14:57:50

标签: php css apache .htaccess mod-rewrite

我正在使用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的东西很新,因为我正在学习这一切,我很想知道为什么会出现这种情况?

3 个答案:

答案 0 :(得分:2)

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

您需要将所有链接更改为绝对URL(使用前导/)或在页面标题中指定相对基URI(在<head> </head>标记内):

<base href="/" />

答案 1 :(得分:1)

使用<base href="base link" />这将基本上设置linksimg的基础。这将修复链接。示例:<base href="/" />

答案 2 :(得分:1)

One way is to have a new redirect rule to remove trailing slash and then your css/js would not be a problem:

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]

However also consider using absolute paths for css/js e.g.

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

Or else you can add this in the <head> section of your page's HTML:

<base href="/apx/" />