我正在使用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的东西很新,因为我正在学习这一切,我很想知道为什么会出现这种情况?
答案 0 :(得分:2)
当您的浏览器转到http://example.com/signin/
时,相对基URI将变为/signin/
。这意味着整个页面内容中的每个相对链接都会附加/signin/
作为网址。原始链接只是/login.php
,它构成了基本URI /
。您的浏览器对您的重写规则一无所知,只是它在位置栏中看到的内容。
您需要将所有链接更改为绝对URL(使用前导/
)或在页面标题中指定相对基URI(在<head> </head>
标记内):
<base href="/" />
答案 1 :(得分:1)
使用<base href="base link" />
这将基本上设置links
,img
的基础。这将修复链接。示例:<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/" />