【发布时间】:2017-07-04 00:21:54
【问题描述】:
我有一个新网站,需要 301 个旧页面,并在某些路径上添加虚 url
新网站产品页面示例网址 http://www.mywebsite.com/en/section/nice-url-name_123.html 从这个 url 我需要获取部分、名称和 id
这是我的规则
RewriteRule ^en/([^_]+)/([^_]+)_([0-9]+).html /en/$1/detail.php?name=$2&id=$3 [L]
这很好用
在以前版本的网站上,他们使用了这种 url 格式
http://www.mywebsite.com/en/section/nice-url-name
我找不到拦截此网址并重定向到我的新网址的方法,id 丢失并且可以为 0
所以它应该变成 http://www.mywebsite.com/en/section/nice-url-name_0.html
因为我找不到方法,所以我尝试在 URL 处添加斜杠
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]
如果不以无限 301 循环结束,我找不到任何其他方法 但是这样我需要排除我所有的扩展,否则 Apache 会在图像、字体、pdf 等末尾添加斜杠
【问题讨论】:
-
为什么
([^_]+)无处不在?([^/]+)对这个部分不是更有意义吗? -
为什么你不能匹配
/en/section/nice-url-name?对我来说似乎很简单,不需要重复重写。 -
你能给我举个例子吗?
-
可能是这样的,我会说:
RewriteRule ^/?en/([^/]+)/([^\./]+)$ /en/301.php?redirected=1&section=$1&name=$2 [L] -
谢谢它似乎工作我也用 ([^/]+) 改变了其他规则,而不是 ([^_]+) 你可以回答,我会接受
标签: php apache .htaccess mod-rewrite