.htaccess 更改URL和重写规则不起作用

.htaccess 更改URL和重写规则不起作用,.htaccess,mod-rewrite,url-rewriting,.htaccess,Mod Rewrite,Url Rewriting,最近一直在使用htaccess文件来创建重写 一切都很好,但最近做了一个更改,在产品后面添加了一个类别名称,如下所示: http://localhost/Limestone_Tiles/products/Antalya_Blanc.html 过去是这样的: http://localhost/products/Antalya_Blanc.html 当一切正常时。重写规则如下所示: RewriteRule ^products/(.*).html$ product_details.php?&

最近一直在使用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
因此,为了适应新的变化,我将重写规则更改如下:

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
将加载,但没有一个图像可以加载-当页面加载时,这对我来说没有意义?为什么这些图像不显示

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

重写规则^U瓷砖/产品/图像/(.*)$images/$1

将加载该特定类别的图像

如果我将图像url放入浏览器:

http://localhost/Limestone_Tiles/products/images/face.png
我得到以下信息:

在此服务器上找不到请求的URL/images/u Tiles

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

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


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

这是因为您的规则中有分组,它们反向引用了第一个分组匹配,而不是您真正想要的匹配。比如说,根据这条规则:

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

http://localhost/Limestone_Tiles/products/Antalya_Blanc.html
重写的URI将是:
/product\u details.php?&furl=石灰岩瓷砖

而以前,如果使用旧规则,它将被重写为:
/product\u details.php?&furl=Antalya\u Blanc

如果这是你想要的行为,那没关系,只是它违反了形象规则:

RewriteRule ^(.*)/products/images/(.*)$ images/$1
$1
反向引用第一组匹配的
(.*)
,即
/products/images/
之前的匹配,而不是实际的图像。需要将其更改为:

RewriteRule ^(.*)/products/images/(.*)$ images/$2
您最好更改HTML内容并在那里修复此图像内容,而不是创建重写规则来尝试更正它。您可以尝试将其添加到页面的页眉:

<base href="/">

太棒了-这真是太棒了!我也会考虑你的建议。非常感谢