在url上重写Ruule和301,最后没有斜杠

时间:2017-07-03 15:22:30

标签: php apache .htaccess mod-rewrite

我有一个新网站,需要301个旧网页,并在某个路径上添加虚荣网址

新网站产品页面示例网址 http://www.mywebsite.com/en/section/nice-url-name_123.html 从这个网址我需要抓住部分,名称和ID

这是我的规则

RewriteRule ^en/([^_]+)/([^_]+)_([0-9]+).html /en/$1/detail.php?name=$2&id=$3 [L]

这很好用

在网站的早期版本中,他们使用此网址格式

http://www.mywebsite.com/en/section/nice-url-name

我无法找到拦截此网址并重定向到我的新网址的方法,ID丢失且可以为0

所以它应该成为 http://www.mywebsite.com/en/section/nice-url-name_0.html

因为我无法找到一种方法,我尝试在网址

添加一个trailling斜杠
RewriteCond %{REQUEST_URI}  !\.(php|html?|jpg|png|gif|ttf|ttf)$
RewriteRule ^(.*[^/])$ /$1/ [L,R=301]

然后尝试逐节捕捉它们

RewriteRule ^en/section1/([^_]+)/ /it/301.php?redirectd=section1&name=$1 [L]

如果没有以无限循环结束,我无法找到任何其他方式 但是这种方式我需要排除所有扩展,否则Apache将在图像,字体,pdf等结尾处添加尾部斜杠

1 个答案:

答案 0 :(得分:1)

要回答你的陈述“我找不到拦截这个网址的方法......”我想提出一些建议:

RewriteEngine on
RewriteRule ^/?en/([^/]+)/([^\./]+)$ /en/301.php?redirected=1&section=$1&name=$2 [L]