使用查询字符串重写 URL 时存在错误路径问题



我想要的是这个链接

gallery/1

前往

gallery.php?id=1

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

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

这让我可以根据需要获取该 ID,但页面上没有任何内容显示,因为它假设现在所有文件路径都以 gallery 开头。就像应该img/icon.png图像的路径一样,它现在是gallery/img/icon.png的,所以它不会显示。如何解决这个问题?我想我误解了关于 url 重写的一些事情。

URL

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

<base href="/" />

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

src="img/icon.png"

并且您处于 yourwebsite.com/gallery 状态,那么您的图像将变得yourwebsite.com/gallery/img/icon.png.

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

mod_rewrite 中,您可以指示某些重写规则仅在满足一个或多个条件时才适用。

在这种情况下,您希望仅当 URI 以 gallery 开头时才应用规则:

RewriteCond %{REQUEST_URI} ^gallery
RewriteRule ^gallery/(.+) gallery.php?id=$1

您在RewriteRule之前缺少一个RewriteCond。试试这个:

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

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

最新更新