使用apache mod_rewrite的方向

时间:2012-04-24 02:25:17

标签: apache .htaccess mod-rewrite

我对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文件并重新启动服务器,对吧?如果是这种情况,那么我没有权限。

1 个答案:

答案 0 :(得分:1)

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

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

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

URL Rewriting Guide有很多信息和示例。