以下代码允许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$$$/
那么如何更改代码以仅允许完全匹配但不允许部分匹配。
答案 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
本身可以处理这个问题。