0

最近一直在使用 htaccess 文件来创建重写。

一切运行良好,但最近进行了更改,包括一个类别名称,后跟产品,如下所示:

http://localhost/Limestone_Tiles/products/Antalya_Blanc.html

它曾经是:

http://localhost/products/Antalya_Blanc.html

当一切正常时。重写规则如下:

RewriteRule ^products/(.*).html$ product_details.php?&furl=$1 [NC,L]
RewriteRule ^products/images/(.*)$ images/$1
RewriteRule ^products/picture_upload/(.*)$ picture_upload/$1
RewriteRule ^products/thumbnail.php(.*)$ thumbnail.php$1

所以为了适应新的变化,我改变了重写规则如下:

RewriteRule ^(.*)/products/(.*).html$ product_details.php?&furl=$1 [NC,L]
RewriteRule ^(.*)/products/images/(.*)$ images/$1
RewriteRule ^(.*)/products/picture_upload/(.*)$ picture_upload/$1
RewriteRule ^(.*)/products/thumbnail.php(.*)$ thumbnail.php$1

现在这种作品因为

http://localhost/Limestone_Tiles/products/Antalya_Blanc.html

将加载,但没有图像加载 - 当页面加载时这对我来说没有意义吗?为什么没有图片?

如果我将重写规则更改为:

RewriteRule ^Limestone_Tiles/products/images/(.*)$ images/$1

图像将为该特定类别加载!

如果我将图片网址放入浏览器:

http://localhost/Limestone_Tiles/products/images/face.png

我收到以下消息:

在此服务器上找不到请求的 URL /images/Limestone_Tiles。

这也很奇怪,因为 /images/Limestone_Tiles 不是我刚刚粘贴到地址栏中的 Url。

也许我的重写规则仍然不正确?

非常感谢您提前提供的帮助。

4

1 回答 1

1

这是因为您的规则具有反向引用第一个分组匹配而不是您真正想要的匹配的分组。说,给定这个规则:

RewriteRule ^(.*)/products/(.*).html$ product_details.php?&furl=$1 [NC,L]

这个网址:

http://localhost/Limestone_Tiles/products/Antalya_Blanc.html

重写后的 URI 将是:/product_details.php?&furl=Limestone_Tiles

而在以前,使用旧规则,它会被重写为:/product_details.php?&furl=Antalya_Blanc

如果这是您的预期行为,那很好,除非它违反了图像规则:

RewriteRule ^(.*)/products/images/(.*)$ images/$1

反向引用第$1一个分组 match (.*),一个before /products/images/,而不是实际图像。需要改为:

RewriteRule ^(.*)/products/images/(.*)$ images/$2

您最好更改 HTML 内容并在那里修复此图像内容,而不是创建重写规则来尝试更正它。您可以尝试将其添加到页面的标题中:

<base href="/">
于 2013-06-28T18:31:02.053 回答