Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/apache/8.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
Regex 这是使用正则表达式可以实现的吗?_Regex_Apache_.htaccess_Redirect_Centos - Fatal编程技术网

Regex 这是使用正则表达式可以实现的吗?

Regex 这是使用正则表达式可以实现的吗?,regex,apache,.htaccess,redirect,centos,Regex,Apache,.htaccess,Redirect,Centos,我有一个奇怪的URL,它的状态是200,但它不应该。它应该只给出一个404错误。在htaccess中是否有404重定向可用于此目的 好的URL看起来像这样 www.example.com/this-is-static/anytext www.example.com/this-is-static/anytext/alsoanytext 或 或 或 错误的URL如下所示 www.example.com/this-is-static/anytext www.example.com/this-is

我有一个奇怪的URL,它的状态是200,但它不应该。它应该只给出一个404错误。在htaccess中是否有404重定向可用于此目的

好的URL看起来像这样

www.example.com/this-is-static/anytext
www.example.com/this-is-static/anytext/alsoanytext

错误的URL如下所示

www.example.com/this-is-static/anytext
www.example.com/this-is-static/anytext/alsoanytext
旁注:单词anytext、alsoanytext和alsoanytext也是随机通配符*。。。它们可以是任何单词。数字123可以是数字的任意组合

这是静态的,不会改变

如您所见,错误的URL没有部分uxxxxxx

我基本上需要它,这样,如果URL到达子文件夹alsoanytext及其后但没有下划线,则可以重定向到404

希望这是有道理的

编辑2:

我不确定下面的方法是否可以工作,因为正则表达式匹配所有URL,除了坏的一个,这使得htaccess在不为所有其他子文件夹设置新规则的情况下无法实现

简单地说,以这个为例,我们如何得到这条线

www.example.com/this-is-static/anytext/alsoanytext


要成为唯一匹配项,请对非捕获组使用以下表达式:

www.example.com\/这是静态\/[^\/\s]*?:\/[^\\s]+.*$ 解释:

定期对所有的数据进行匹配。 匹配除斜杠[^\/\s]*以外的所有字符。 ?:用于/alsoanytext内容的非捕获组。这个末尾的量词使该部分可选,因此/anytext没有任何其他内容也匹配。 \/现在匹配斜线。 [^\s]+匹配除下划线以外的所有内容。 匹配下划线。 匹配除换行符之外的任何其他内容。*。如果“全部匹配”不正确,请使用首选方法匹配URL的其余部分。 匹配字符串$的结尾。需要确保/anytext后面没有任何内容,但格式正确的/alsoanytext\u除外。否则,当使用错误的URL时,您可能会有部分匹配,因为开头将与/anytext匹配。
您可以在中看到它。

对非捕获组使用以下表达式:

www.example.com\/这是静态\/[^\/\s]*?:\/[^\\s]+.*$ 解释:

定期对所有的数据进行匹配。 匹配除斜杠[^\/\s]*以外的所有字符。 ?:用于/alsoanytext内容的非捕获组。这个末尾的量词使该部分可选,因此/anytext没有任何其他内容也匹配。 \/现在匹配斜线。 [^\s]+匹配除下划线以外的所有内容。 匹配下划线。 匹配除换行符之外的任何其他内容。*。如果“全部匹配”不正确,请使用首选方法匹配URL的其余部分。 匹配字符串$的结尾。需要确保/anytext后面没有任何内容,但格式正确的/alsoanytext\u除外。否则,当使用错误的URL时,您可能会有部分匹配,因为开头将与/anytext匹配。
您可以在上看到它。

这有两个方面。。。regex和Apache.htaccess

@MarcSances似乎创建了匹配良好URL+1的正则表达式。尽管您需要\s空白作为否定字符类的一部分吗?使用mod_rewrite,您可以简单地用一个!前缀不匹配好的URL,即成功匹配坏的URL

在Apache配置文件中,您不需要反斜杠转义斜杠,因为斜杠没有特殊含义,没有正则表达式分隔符,只有空格作为参数分隔符。很不幸,regexr.com不允许您更改regex分隔符

请注意,使用RewriteRule指令,您只匹配URL路径减去.htaccess中的斜杠前缀,而不是主机名

当为R标志指定非3xx状态时,将忽略本例中的替换字符串ie.error.php。您应该指定一个连字符-而不是显式地表示没有替换。此外,L标志是多余的,这是隐含的

因此,要否定这个表达式,它将变成:

RewriteRule !^this-is-statis/[^/]*(?:/[^_]+_.*)?$ - [R=404]
将为与良好URL不匹配的请求URL提供404 ErrorDocument

但是,看起来您应该能够直接匹配错误的URL,除非alsoanytext本身可以合法地包含下划线。例如:

RewriteRule ^this-is-static/[^/]+/[^/_]+$ - [R=404]

这有两个方面。。。regex和Apache.htaccess

@MarcSances似乎创建了匹配良好URL+1的正则表达式。尽管您需要\s空白作为否定字符类的一部分吗?使用mod_rewrite,您可以简单地用一个!前缀不匹配好的URL,即成功匹配坏的URL

在Apache配置文件中,您不需要反斜杠转义斜杠,因为斜杠没有特殊含义,没有正则表达式分隔符,只有空格作为参数分隔符。很不幸,regexr.com不允许您更改regex分隔符

请注意,使用RewriteRule指令,您只匹配URL路径减去.htaccess中的斜杠前缀,而不是主机名

当为R标志指定非3xx状态时,将忽略本例中的替换字符串ie.error.php。您应该指定一个 单连字符-改为显式表示不替换。此外,L标志是多余的,这是隐含的

因此,要否定这个表达式,它将变成:

RewriteRule !^this-is-statis/[^/]*(?:/[^_]+_.*)?$ - [R=404]
将为与良好URL不匹配的请求URL提供404 ErrorDocument

但是,看起来您应该能够直接匹配错误的URL,除非alsoanytext本身可以合法地包含下划线。例如:

RewriteRule ^this-is-static/[^/]+/[^/_]+$ - [R=404]

谢谢你,但是我需要澄清一下这个问题,我刚才回答了这个问题,anytext单词象征着通配符。还添加了一个可能更好的URL好的,我已经更新了答案以满足您的要求。再次感谢您,但是我很难告诉规则获取所有与此正则表达式不匹配的URL并将其设置为404,我尝试了类似于重写规则^this is statis\/[^\/\s]*?:\/[^\s]+.*$error.php[R=404,L]但这显然与我所希望的相反,因为在regexr中,我有大量的URL需要匹配,如果你不否定空格/换行符,字符类就会泄漏到下一行。我知道这不是真实情况所必需的,但我已经将其包括在内,以与regexr的答案相匹配。谢谢你,但我需要澄清这个问题,我刚才已经澄清了。anytext单词象征通配符。还添加了一个可能更好的URL好的,我已经更新了答案以满足您的要求。再次感谢您,但是我很难告诉规则获取所有与此正则表达式不匹配的URL并将其设置为404,我尝试了类似于重写规则^this is statis\/[^\/\s]*?:\/[^\s]+.*$error.php[R=404,L]但这显然与我所希望的相反,因为在regexr中,我有大量的URL需要匹配,如果你不否定空格/换行符,字符类就会泄漏到下一行。我知道这不是真实情况所必需的,但我已经将其包括在内,以与regexr的答案相匹配。感谢您的全面响应,上一条规则做到了它应该做的事情。感谢您的全面响应,上一条规则做到了它应该做的事情。
/this-is-static/anytext/alsoanytext
RewriteRule ^this-is-static/[^/]+/[^/_]+$ - [R=404]