完全匹配404错误

时间:2017-09-09 09:42:23

标签: php .htaccess url mod-rewrite url-rewriting

以下代码允许example.com/bed/example.com/table/,并为具有此结构的所有其他网址返回404错误:example.com/$$$/

RewriteCond %{SCRIPT_FILENAME} !-d
RewriteCond %{SCRIPT_FILENAME} !-f
RewriteCond %{REQUEST_URI} ^/.*\/    
RewriteCond %{REQUEST_URI} !bed|table [NC]
RewriteRule ^(.*)$ - [L,R=404]

问题是404错误对这些结构不起作用: example.com/$$$bed$$$/example.com/$$$table$$$/

那么如何更改代码以仅允许完全匹配但不允许部分匹配。

1 个答案:

答案 0 :(得分:1)

  

那么如何更改代码以仅允许完全匹配但不允许部分匹配。

在正则表达式模式中使用锚点:

RewriteCond %{SCRIPT_FILENAME} !-d
RewriteCond %{SCRIPT_FILENAME} !-f
RewriteCond %{REQUEST_URI} !^/(bed|table)/?$ [NC]
RewriteRule / - [L,R=404]

正则表达式模式!^/(bed|table)/?$将匹配除/bed//table/之外的所有内容(尾部斜杠可选)。

另请注意,您需要额外增加一个RewriteCond %{REQUEST_URI} ^/.*\/因为RewriteRule本身可以处理这个问题。