这个问题长期困扰着我。我承认这可能是因为缺乏经验所以我希望我能得到一些想法。
这是.htaccess
中的代码Options +FollowSymLinks
RewriteEngine On
RewriteRule ^view-([0-9]+)$ view.php?id=$1 [NC,QSA]
因此,当我访问http://domain/project/view-44时,它可以正常工作,但我希望最终使用斜杠,例如http://domain/project/view-44/
所以我把最后一行改为
RewriteRule ^view-([0-9]+)/$ view.php?id=$1 [NC,QSA]
现在当我访问http://domain/project/view-44/所有图像时,javascripts和样式都消失了。
现在,它不是从http://domain/project/style.css获取css,而是尝试从http://domain/project/view-44/style.css
获取它我认为问题在于为项目指定url的方式不正确。就我而言,它只是
<link rel="stylesheet" type="text/css" href="style.css" >
<img src="images/web/showreel.png" alt="Image1" />
这是否意味着我必须在每个必需元素中指定一个完整的URL(http://domain/project/images/web/showreel.png)?
答案 0 :(得分:3)
最好指定绝对URL,因为您知道始终会到达文档。我知道它很长,但不是宣布
<img src='http://domain/project/images/web/showreel.png' />
设置一个PHP gloabal变量,如
define('SITE_URL', ' http://domain/project');
然后做
<img src='<?php echo SITE_URL; ?>/images/web/showreel.png' />
关于.htaccess,请查看http://blog.valtersboze.com/2009/06/add-or-remove-trailing-slash-in-url-with-htaccess/
这解释了如何删除或保留尾部斜杠,但不是两者兼而有之,谷歌不同意这两种情况,他们会将其视为重复内容。
答案 1 :(得分:2)
简单的解决方法是使用
<base href="/index">
在HTML模板的<head>
中。因此,所有资源链接再次相对于根目录,与虚拟RewriteRule结构无关。
答案 2 :(得分:1)
把它放在文件的头部:
<base href="http://domain/project/" />
这是必要的,因为客户端的浏览器无法知道重写的URL,只能在服务器端知道。