使用查询字符串重写URL时出现错误的路径问题

时间:2015-04-27 15:01:18

标签: .htaccess

我想要的是这个链接

gallery/1

前往

gallery.php?id=1

我在.htaccess文件中为此写的是

RewriteRule ^gallery/(.*)? gallery.php?id=$1

允许我按照我的意愿获取该ID,但页面上没有任何内容显示,因为它假设现在所有文件路径都以gallery开头。就像图片的路径应该是img/icon.png时一样,它现在是gallery/img/icon.png,因此它不会显示出来。如何解决这个问题?我想我对网址重写有些误解。

4 个答案:

答案 0 :(得分:2)

我认为问题是你的图像来源而不是你的.httaccess。如果您的图片使用

src="img/icon.png"

并且您在yourwebsite.com/gallery中,那么您的图片将变为yourwebsite.com/gallery/img/icon.png

尝试更改来源,以包含完整网址(yourwebsite.com/img/icon.png)或来自根(/img/icon.png)的路径。

答案 1 :(得分:2)

mod_rewrite中,如果符合一个或多个条件,您可以指出某些重写规则仅适用于

在这种情况下,如果URI以gallery开头:

,您只希望应用规则
RewriteCond %{REQUEST_URI} ^gallery
RewriteRule ^gallery/(.+) gallery.php?id=$1

答案 2 :(得分:2)

您在RewriteCond之前错过了RewriteRule。试试这个:

RewriteCond "%{REQUEST_URI}" ^gallery
RewriteRule ^gallery/([0-9]+) /gallery.php?id=$1

您的(.*)?表达式不正确,因为*将匹配零个或多个字符(您需要一个或多个数字,来自您的示例),而?与{{1}一起使用是多余的}}

答案 3 :(得分:1)

URL中的额外斜杠会更改相对URL基数。您内容中相对网址的所有链接现在都将使用不正确的基础。您可以使用绝对网址(以/开头)或在网页标题中添加基数来解决此问题:

<base href="/" />