Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/.htaccess/5.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
.htaccess 在3或4个字符后重写规则_.htaccess_Redirect - Fatal编程技术网

.htaccess 在3或4个字符后重写规则

.htaccess 在3或4个字符后重写规则,.htaccess,redirect,.htaccess,Redirect,我的URL如下所示: www.example.com/1234-title-of-an-event/whatever/ 我需要在“1234-”(但也可以是3位数字,如“123-”)之后和斜杠“/无论什么”之前获取所有内容,以便重定向为: www.example.com/title-of-an-event/ 我尝试使用以下规则(作为最后一条规则),但它似乎不起作用,我只得到一个500内部服务器错误 RewriteRule ^\/([0-9]{3,4})-(.*)\/(.*) https://w

我的URL如下所示:

www.example.com/1234-title-of-an-event/whatever/
我需要在
“1234-”
(但也可以是3位数字,如“123-”)之后和斜杠“/无论什么”之前获取所有内容,以便重定向为:

www.example.com/title-of-an-event/
我尝试使用以下规则(作为最后一条规则),但它似乎不起作用,我只得到一个
500内部服务器错误

RewriteRule ^\/([0-9]{3,4})-(.*)\/(.*) https://www.example.com/$2 [R=301, L]
500错误很可能是由flags参数中的空格引起的。它应该是
[R=301,L]
(无空格)。但是,由于
RewriteRule
模式上的斜杠前缀,此指令在
.htaccess
中不会执行任何操作。在目录上下文(即
.htaccess
)中,由
重写规则
模式匹配的URL路径不包括目录前缀,该前缀以斜杠结尾,因此匹配的URL路径从不以斜杠开头。(您需要在服务器/vhost上下文中匹配斜杠前缀。)

如果您有其他mod_rewrite指令,这也可能不是“最后一条规则”——可能存在冲突(没有看到整个文件)

无需在
重写规则
模式中转义斜杠。斜杠在这里没有特殊意义,因为空格在Apache配置文件中有效地用作正则表达式分隔符

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

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

RewriteRule ^\d{3,4}-([^/]+) /$1 [R=302,L]
这将匹配事件的
/1234标题
,并放弃所有其他内容,在
$1
反向引用中返回事件的
标题
。(成功匹配是否需要尾部的
/

\d
只是
[0-9]
的简写

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

除非您有多个域或在重定向响应中规范化方案/主机名,否则无需在替换中包含绝对URL

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

RewriteRule ^\d{3,4}-([^/]+) /$1 [R=302,L]