【发布时间】:2020-11-20 15:21:55
【问题描述】:
RedirectMatch 404 ^/$
此代码阻止主页
RedirectMatch 404 ^/.*$
此代码阻止所有页面
如何得到除一个(/blog)以外的所有页面都被屏蔽(404)的效果?
【问题讨论】:
-
您能否通过编辑您的问题来显示您的完整 .htaccess
-
您是否特别想为此使用 mod_alias?
RedirectMatch 404 ^/$
此代码阻止主页
RedirectMatch 404 ^/.*$
此代码阻止所有页面
如何得到除一个(/blog)以外的所有页面都被屏蔽(404)的效果?
【问题讨论】:
这应该可行:
RedirectMatch 404 ^/((?!blog).*)$
【讨论】:
/blog开头的页面
/blog 被阻止,您可能与现有指令有冲突。 (?)
/blog 和 /blog/foobar 之外的所有内容。它在您的服务器上不起作用的原因是因为您正在使用RewriteRules 来处理其他 URL,并且该规则与该规则冲突。如果您想解决此问题,请使用RewriteRule。而不是 RedirectMatch 。 @anubhava 的解决方案绝对适合您。
如何得到除一个(/blog)以外的所有页面都被屏蔽(404)的效果?
您可以使用:
RewriteEngine On
RewriteBase /
# if request doesn't start with /blog then return R=404
RewriteCond %{THE_REQUEST} !\s/+blog[\s?] [NC]
RewriteRule ^ - [L,R=404]
RewriteRule ^index\.php$ - [L]
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule . index.php [L]
【讨论】:
example.com/blog 是否也返回 404?
我的完整 .htaccess:
RewriteEngine On
RewriteBase /
RewriteRule ^index\.php$ - [L]
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule . /index.php [L]
RedirectMatch 404 ^/((?!blog).*)$
这段代码阻止了一切:主页、子页面和/blog。
【讨论】: