【问题标题】:RewriteRule and 301 on url without trailing slash at the endurl 上的 RewriteRule 和 301,末尾没有斜杠
【发布时间】: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


【解决方案1】:

要回答您的陈述“我无法找到拦截此网址的方法...”,我想提出以下建议:

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

【讨论】:

    猜你喜欢
    • 2011-09-13
    • 1970-01-01
    • 1970-01-01
    • 2023-03-23
    • 2012-10-27
    • 1970-01-01
    • 1970-01-01
    • 2016-06-27
    • 2016-11-29
    相关资源
    最近更新 更多