0

我不太擅长使用 mod_rewrite 或正则表达式,但我最终需要对要移动的站点使用 301 重定向。旧址的结构是这样的

http://www.mywebsite.com/FF_Supersneaker_Black_Metallica_p/155-157.htm

同一产品的新网站也是如此

https://www.mywebsite.com/FF_Supersneaker_Black_Metallica_p.html

我需要做的是提取并删除“/ 155-157”并将扩展名更改为.html而不是.htm

所以逻辑上我想我需要找到最后一次出现的“/”和最后一次出现的“。” 并将其间所有内容的值更改为“”。那么文件扩展名的更改在互联网上无处不在,但我不知道如何将其与其余部分合并。

编辑: 这是我的 .htaccess 文件:

<IfModule mod_rewrite.c>  
RewriteEngine On    
RewriteRule /(.*)/(.*)/[^/]*.htm$ /$1$2.html
</IfModule>

当我尝试使用它时,这是我的重写日志中的相关条目。(我只是更改了ip和域名。我使用tail并复制了我尝试进入页面时弹出的条目。

255.255.255.255 - - [25/Apr/2012:11:57:24 --0400] [www.mywebsite.com/sid#9b25ed8][rid#9e3cc48/initial] (1) [perdir /var/www/test/] pass through /var/www/test/FF_Supersneaker_Black_Metallica_p/155-157.htm

我添加了额外的 /(.*) 因为我的测试页面上有一个额外的目录。其结构是 http://www.mywebsite.com/test/FF_Supersneaker_Black_Metallica_p/155-157.htm 重定向到 http://www.mywebsite.com/test/FF_Supersneaker_Black_Metallica_p.html

抱歉问了这么多问题,您也只能启用重写日志购买进入 apache.conf 或 httpd.conf 文件并重新启动服务器,对吗?如果是这种情况,那么我没有权限。

4

1 回答 1

1

您在这里所做的只是剥离最后一个路径组件,然后添加“.html”。所以也许是这样的:

RewriteRule /(.*)/[^/]*.htm$ /$1.html

该序列[^/]表示“任何不是 a 的字符/”,并且*表示“前一个模式 0 次或更多次”,因此[^/]*.htm匹配字符串末尾的任何非/字符.htm字符串。我们丢弃这些,使用其他所有内容,然后添加.html.

URL 重写指南有很多信息和示例。

于 2012-04-24T03:41:28.247 回答