Htaccess:在

时间:2018-11-30 23:32:17

标签: .htaccess mod-rewrite

我正在尝试阻止访问我们的/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=

它只是剥离管理部分。我需要它来剥离所有东西。

1 个答案:

答案 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会被浏览器硬缓存,因此可能会使测试出现问题。

在测试之前,您需要清除浏览器缓存。