Mod_rewrite未按预期工作

时间:2012-04-25 16:39:09

标签: regex apache mod-rewrite

我正在尝试将特定的结构化网址重写为另一种结构。

原始网址是

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

我试图将其重写为

http://www.mywebsite.com/FF_Supersneaker_Black_Metallica.html

基本上删除“_p / 155-157.htm”并附加.html

我用来执行此操作的htaccess文件是

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

但它似乎失败了,这是我进入页面时得到的重写日志。

255.255.255.255 - - [25/Apr/2012:12:34:43 --0400] [www.mywebsite.com/sid#9b25ed8][rid#9e33c28/initial] (3) [perdir /var/www/test/] strip per-dir prefix: /var/www/test/FF_Supersneaker_Black_Metallica_p/155-157.htm -> FF_Supersneaker_Black_Metallica_p/155-157.htm
255.255.255.255 - - [25/Apr/2012:12:34:43 --0400] [www.mywebsite.com/sid#9b25ed8][rid#9e33c28/initial] (3) [perdir /var/www/test/] applying pattern '/(.*)/(.*)_p/[^/]*.htm$' to uri 'FF_Supersneaker_Black_Metallica_p/155-157.htm'
255.255.255.255 - - [25/Apr/2012:12:34:43 --0400] [www.mywebsite.com/sid#9b25ed8][rid#9e33c28/initial] (1) [perdir /var/www/test/] pass through /var/www/test/FF_Supersneaker_Black_Metallica_p/155-157.htm

我相信我的规则似乎有些不对劲,但我不确定是什么。如果有人能给我一些想法,我会很感激。

感谢您的帮助。

1 个答案:

答案 0 :(得分:2)

首先,看看这个:

strip per-dir prefix: /var/www/test/FF_Supersneaker_Black_Metallica_p/155-157.htm -> FF_Supersneaker_Black_Metallica_p/155-157.htm

您要匹配的路径实际上是FF_Supersneaker_Black_Metallica_p/155-157.htm,因为您在目录上下文(来自.htaccess文件)中运行。所以它不会匹配以/ ...

开头的任何内容

这表明你真正想要的只是......

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

...如果您希望结果为:

FF_Supersneaker_Black_Metallica.html