URL重写没有做它应该做的事情,但代码似乎很好

时间:2015-06-06 11:23:11

标签: php .htaccess url-rewriting

我最近在网站上为一位朋友工作,她可以上传她的画作。与这些图像一起输入一些信息,如大小和技术。这些图像被添加到相册中,然后显示在图库中。功能就在那里,现在我只想重写网址,使它们看起来不像album.php?album_id=xx&name=xx。我希望网址像album/id/name。为此,我有以下重写规则:

RewriteRule ^album/([0-9]+)/([0-9a-zA-Z_-]+) album.php?album_id=$1&naam=$2 [NC]

这意味着如果我转到album/1/test,它应该获取该专辑的数据并显示它,但它不能完全发挥作用。它确实获取了该专辑的数据,但是没有加载图像(即使在检查它正确加载的源时)并且页面上没有任何样式,即使样式表正确加载。奇怪的是,如果我转到album.php?album_id=1&naam=test整个页面都有效,那么我知道album.php页面中的代码是有效的。我还使用以下代码创建了一个test.php文件:

<?php
echo 'ID: ' . $_GET['album_id'] . '<br>';
echo 'Naam: ' . $_GET['naam'];

使用以下重写规则:

RewriteRule ^test/([0-9]+)/([0-9a-zA-Z_-]+) test.php?album_id=$1&naam=$2 [NC]

如果我去test/1/test,我会得到我想要的东西:

ID: 1
Naam: test

所以我知道重写是有效的。

可以找到album.php的代码here

知道是什么导致样式无法加载而图像无法正确加载吗?

1 个答案:

答案 0 :(得分:0)

听起来您正在使用样式表和图像的相对路径。

如果您为图片使用images/album.jpg,则会查找:

http://www.yoursite.com/images/album.jpg

直接加载index.php

但是,它会寻找:

http://www.yoursite.com/album/1/test/images/album.jpg

有你的重写规则。

一个简单的解决方案是始终使用相对于Web服务器根目录的绝对路径,如:

/images/image.jpg
/styles/styles.css

请注意开头的斜杠/