首页
学习
活动
专区
工具
TVP
发布
社区首页 >问答首页 >3或4个字符后重写规则

3或4个字符后重写规则
EN

Stack Overflow用户
提问于 2019-06-24 19:00:49
回答 1查看 162关注 0票数 1

我的URL是这样的:

代码语言:javascript
复制
www.example.com/1234-title-of-an-event/whatever/

我需要在"1234-"之后(但也可以是3位数字,如"123-")和斜杠"/whatever“之前获取所有内容,以便重定向为:

代码语言:javascript
复制
www.example.com/title-of-an-event/

我正在尝试以下规则(作为最后一个规则),但它似乎不起作用,我只得到了一个500 Internal Server Error

代码语言:javascript
复制
RewriteRule ^\/([0-9]{3,4})-(.*)\/(.*) https://www.example.com/$2 [R=301, L]
EN

回答 1

Stack Overflow用户

发布于 2019-06-25 04:53:53

RewriteRule ^\/(0-9{3,4})-(.*)\/(.*) https://www.example.com/$2 R=301,L

500错误很可能是由标志参数中的空格引起的。它应该是[R=301,L] (没有空格)。然而,由于RewriteRule模式中的斜杠前缀,该指令在.htaccess中不会做任何事情。在目录上下文中(即,RewriteRule模式匹配的URL-path不包括目录前缀,目录前缀以斜杠结尾,因此匹配的URL-path永远不会以斜杠开始。(您需要在服务器/vhost上下文中匹配斜杠前缀。)

如果你有其他的mod_rewrite指令,这也不应该是“最后的规则”--可能会有冲突(没有看到整个文件)。

RewriteRule模式中不需要转义斜杠。斜杠在这里没有特殊意义,因为空格在Apache配置文件中有效地用作regex分隔符。

我还会修改您的正则表达式以匹配除斜杠以外的所有内容(即。[^/]+),而不是所有内容,因为您的正则表达式(捕获子模式)将匹配示例URL中的title-of-an-event/whatever,而不是预期的title-of-an-event。因为regex在默认情况下是贪婪的。

因此,请尝试在.htaccess文件顶部附近执行以下操作:

代码语言:javascript
复制
RewriteRule ^\d{3,4}-([^/]+) /$1 [R=302,L]

这与/1234-title-of-an-event匹配,并丢弃其他所有内容,在$1反向引用中返回title-of-an-event。(是否需要尾随/<whatever>/才能成功匹配?)

\d[0-9]的简写。

如果没有使用反向引用,则不需要在正则表达式中捕获子模式。

没有必要在替换中包含绝对URL,除非您有多个域,或者正在对重定向响应中的方案/主机名进行规范化。

请注意,这是一个302 (临时)重定向-仅更改为301 (永久)重定向-如果这是您的意图-一旦您确认它工作正常,以避免缓存问题。您需要确保在测试之前清除您的浏览器缓存。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/56735167

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档