我对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文件并重新启动服务器,对吧?如果是这种情况,那么我没有权限。
答案 0 :(得分:1)
你在这里所做的就是剥离最后一个路径组件,然后添加“.html”。也许是这样的:
RewriteRule /(.*)/[^/]*.htm$ /$1.html
序列[^/]
表示“任何字符不是/
”,*
表示“前一个模式0次或更多次”,因此[^/]*.htm
匹配任何字符串字符串末尾的非/
个字符后跟.htm
。我们放弃这些,使用其他所有内容,然后添加.html
。
URL Rewriting Guide有很多信息和示例。