最近一直在使用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不是我刚刚粘贴到地址栏中的网址。
也许我的重写规则仍然不正确?
非常感谢您的帮助。
答案 0 :(得分: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
反向引用第一个分组匹配(.*)
,之前的 /products/images/
,而不是实际图像。需要将其更改为:
RewriteRule ^(.*)/products/images/(.*)$ images/$2
您可能最好更改HTML内容并修复此图像,而不是创建重写规则以尝试更正它。您可以尝试将其添加到网页的标题中:
<base href="/">