使用apache mod_重写的方向

使用apache mod_重写的方向,apache,.htaccess,mod-rewrite,Apache,.htaccess,Mod Rewrite,我不太擅长mod_rewrite或正则表达式,但我需要为我正在移动的站点最终使用301重定向。旧址的结构也是如此 同一产品的新网站也是如此 我需要做的是提取并删除“/155-157”,并将扩展名改为.html而不是.htm 所以从逻辑上讲,我想我需要找到“/”的最后一个匹配项和“.”的最后一个匹配项,并将这两者之间的所有值都更改为“”。然后,文件扩展名的更改在互联网上随处可见,但我不知道如何将其与其余部分合并 编辑: 这是我的.htaccess文件: <IfModule mod_rew

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

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

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

所以从逻辑上讲,我想我需要找到“/”的最后一个匹配项和“.”的最后一个匹配项,并将这两者之间的所有值都更改为“”。然后,文件扩展名的更改在互联网上随处可见,但我不知道如何将其与其余部分合并

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

<IfModule mod_rewrite.c>  
RewriteEngine On    
RewriteRule /(.*)/(.*)/[^/]*.htm$ /$1$2.html
</IfModule>
我添加了额外的/(*),因为我的测试页面上有一个额外的目录。其结构是 重定向到


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

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

RewriteRule /(.*)/[^/]*.htm$ /$1.html
序列
[^/]
表示“任何字符不是
/
”,而
*
表示“以前的模式0次或多次”,因此
[^/]*.htm
匹配任何非
/
字符字符串,然后在字符串末尾添加
.htm
。我们放弃这些,使用其他所有东西,添加
.html


有很多信息和示例。

部分“(*)”是什么意思?这只是针对.com和.net以及.edu等吗?我不认为这是它正在做的,但这是我唯一能想到的想法。感谢
/(.*)
捕获(这就是
()
所做的)除最后一个路径组件之外的所有其他内容,并将其分配给
$1
…以便我们可以在规则的右侧使用它。等等,查找除换行符以外的任何字符0次或更多次,对吗?现在,这两个都被斜杠/(.*)/[^/]*.htm$/$1.html包围了。在那里放置它们的目的是什么?我知道搜索和替换,但通常不加前缀s?另外,$1.html中的$1,是否只是表示获取上一个的结果并向其追加.html?斜杠不是特殊字符;它们只是匹配URL的一部分<代码>$1表示“规则左侧第一组括号中的内容”。没有
s/
前缀;这不是
sed
.Ahh好的,所以www.mywebsite.com被假定并在那里使用匹配的/除新行以外的任何字符0次或更多次(又名FF_Supersneaker\u Black\u Metallica\p)/以.htm结尾的东西(又名155-157.htm),然后取第一部分($1)和append.html来获取(FF_Supersneaker\u Black\u Metallica\u p.html)。现在为了教育目的,我想我可以用$2来引用第二套规则?甚至有可能拥有3、4或更多套规则,并将它们引用为$3或$4?
RewriteRule /(.*)/[^/]*.htm$ /$1.html