我希望地址栏显示:
http://facebook.com/user
http://facebook.com/user/ -> http://facebook.com/user
http://facebook.com/user/photos -> http://facebook.com/user/photos
我的重写规则:
RewriteEngine On
RewriteRule ^(.+)/$ $1 [NC]
RewriteRule ^([A-Za-z0-9_-]+)/?([A-Za-z0-9_-]*)$ user.php?id=$1&second=$2 [NC,L]
会发生什么:
1). http://domain.com/user (working well)
2). http://domain.com/user/ (keeps the / in the address bar and destroys css/js/img paths)
3). http://domain.com/user/photos (same result as 2, correct except the paths)
如果我使用<base href="...">
强制页面正确显示的路径。但我想在没有它的情况下解决我的问题。
如何删除地址栏中的尾部斜杠?重写似乎与预期的一样。
答案 0 :(得分:1)
您的问题是,当您有人访问http://domain.com/user/photos
时,页面中的css,js和其他相关链接会解析为http://domain.com/user/css/main.css
(例如)。
您有两个解决方案:
因此,更简单的解决方案是使用基本标记。
注意:即使您最后删除了斜杠,它也可能适用于http://domain.com/user/
但绝对不适用于http://domain.com/user/photos
答案 1 :(得分:1)
当您打算使用友好URL时,必须使用资源的绝对路径。
您可能已经用这种方式声明了index.php
:
<link rel="stylesheet" href="stylesheets/styles.css" />
<img src="assets/user.png" />
<script type="text/javascript" src="scripts/home.js"></script>
/
获取绝对路径但必须以这种方式进行翻译:
<link rel="stylesheet" href="/stylesheets/styles.css" />
<img src="/assets/user.png" />
<script type="text/javascript" src="/scripts/home.js"></script>
请注意前面的/
,使其成为绝对网址。
<base href="/" />
如果这对您来说是一项繁琐的工作,您可以使用此标记:
<base href="/" />
这将使您的相对URL与Root相关联。
$baseurl
变量另一种更好的方法是使用$baseurl
变量作为前缀。
<link rel="stylesheet" href="<?php echo $baseurl; ?>/stylesheets/styles.css" />
<img src="<?php echo $baseurl; ?>/assets/user.png" />
<script type="text/javascript" src="<?php echo $baseurl; ?>/scripts/home.js"></script>
这样,如果您在一个文件夹中而不是在根目录中托管,您甚至可以更改$baseurl
值。