我使用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="/" />