我正在尝试阻止访问我们的/admin.php
页以及与admin.php
相关的所有内容(这不是文件系统中的文件夹,我们使用的是中央.htaccess
根)。
我可以执行以下操作:
RewriteCond %{REMOTE_ADDR} !^123\.123\.123\.123$
RewriteCond %{THE_REQUEST} ^(.*)?admin\.php(.*)$ [NC]
RewriteRule ^(.*)$ https://oursite.com/$1 [R=301,L]
但是,/admin.php
之后的所有内容在重定向后都会粘贴到URL中,并进入404页。我只希望它重定向到家。
例如,此URL https://example.com/admin.php?/cp/login&return=
重定向到https://example.com/?/cp/login&return=
。
它只是剥离管理部分。我需要它来剥离所有东西。
答案 0 :(得分:1)
RewriteRule ^(.*)$ https://oursite.com/$1 [R=301,L]
此行将重定向回自身-不会“剥离管理部分”吗?在您的示例中,替代中的$1
后向引用将保留值admin.php
(从(.*)
模式< / em>)。要重定向到首页,您需要删除RewriteRule
后向引用。
示例中URL的其余部分($1
之后的所有内容)是查询字符串。默认情况下,确实会将其原封不动地传递到替代(目标URL)。您需要在Apache 2.4+上使用?
(查询字符串丢弃)标志。或在Apache 2.2中的 substitution 字符串的末尾附加一个QSD
(有效地创建一个空查询字符串)。
您也不需要困扰?
服务器变量的 condition ,因为可以在THE_REQUEST
pattern < / em>。 (我假设您不是在内部重写为RewriteRule
?)
因此,我们将其整合在一起:
admin.php
这将检查所请求URL的URL路径中是否出现“ admin.php”。
如果您要重定向回同一主机,则不需要 在替代中明确声明绝对URL。
请注意,这是302(临时)重定向。如果您打算这样做,请仅将其更改为301(永久),当您确认它可以正常运行时。 301会被浏览器硬缓存,因此可能会使测试出现问题。
在测试之前,您需要清除浏览器缓存。