在.htaccess中添加重写规则

时间:2018-03-15 作者:VSB

我在看书this answer, 并试图利用其指南hide login page. 建议编辑.htaccess 我的网站文件如下:

RewriteEngine On
RewriteBase / 
##### ABOVE THIS POINT IS ALREADY INSERTED BY WORD PRESS
##### Michi’s code is BELOW #####
RewriteCond %{REQUEST_URI} wp-admin/
RewriteCond %{QUERY_STRING} !YOURSECRETWORDHERE
RewriteRule .*\\.php [F,L]
RewriteCond %{QUERY_STRING} !YOURSECRETWORDHERE
RewriteRule ^ADMINFOLDER/(.*) wp-admin/$1?%{QUERY_STRING}&YOURSECRETWORDHERE [L]
##### Michi’s code is ABOVE #####
##### BELOW THIS POINT IS ALREADY INSERTED BY WORD PRESS
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule . /index.php [L]
我的.htaccess 文件以以下行开头:

# BEGIN WordPress
<IfModule mod_rewrite.c>
RewriteEngine On
RewriteBase /
RewriteRule ^index\\.php$ - [L]
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule . /index.php [L]
</IfModule>

# END WordPress
我想知道我是否在# BEGIN WordPress# END WordPress 是否可能被wordpress覆盖?这是关于自动脚本的常见情况,但由于没有提到任何警告,我想知道在这个块中添加一些规则是否安全。

4 个回复
最合适的回答,由SO网友:David Sword 整理而成

Wordpress使用这些标记来区分规则。我从来没有,也永远不会在那里设置自定义规则。

退房insert_with_markers()save_mod_rewrite_rules() 在里面wp-admin/includes/misc.php

最值得注意的是,此评论栏回答了您的问题:

/**
 * Inserts an array of strings into a file (.htaccess ), placing it between
 * BEGIN and END markers.
 *
 * Replaces existing marked info. Retains surrounding
 * data. Creates file if none exists.
 */

SO网友:MrWhite

旁白:Michi的代码不太正确,可能不像你想象的那么安全。。。

##### Michi’s code is BELOW #####
RewriteCond %{REQUEST_URI} wp-admin/
RewriteCond %{QUERY_STRING} !YOURSECRETWORDHERE
RewriteRule .*\\.php [F,L]
RewriteCond %{QUERY_STRING} !YOURSECRETWORDHERE
RewriteRule ^ADMINFOLDER/(.*) wp-admin/$1?%{QUERY_STRING}&YOURSECRETWORDHERE [L]
##### Michi’s code is ABOVE #####
第一个RewriteRule 缺少替换参数。这将导致请求被(错误地)重写为/[F,L], 这将导致404。好的,所以访问基本上是被阻止的,但目的是提供403禁止的服务(这是F 标志用于)。因此,以下内容:

RewriteRule .*\\.php [F,L]
应重写为:

RewriteRule \\.php$ - [F]
请注意连字符的使用(-) 对于第二个参数。这看起来像是原始代码中的意外遗漏。此外,无需LF 使用标志。

<小时>

RewriteCond %{QUERY_STRING} !YOURSECRETWORDHERE
RewriteRule ^ADMINFOLDER/(.*) wp-admin/$1?%{QUERY_STRING}&YOURSECRETWORDHERE [L]
如果您知道ADMINFOLDER. 这个YOURSECRETWORDHERE 基本上是绕过的(最终用户不需要)!?所以ADMINFOLDER 真正的“秘密”应该是漫长而神秘的。(TBH,这里不需要2个“秘密”,1个就可以了。)

任何像这样的阻塞指令都应该放在WordPress前端控制器之前。(虽然如果您仅阻止物理文件,但为了发挥功能,这并不重要,因为WP front controller只路由不映射到物理文件/目录的URL路径。)

SO网友:Mark Kaplun

这通常是关于自动脚本的

确切地当wordpress需要重新生成htaccess规则时,它将读取当前文件并替换其中的“wordpress”部分。如果需要将规则包含在该部分中,可以编写插件来覆盖/更改正在生成的规则。

旁注:默默无闻不是安全,暴力不是网站被黑客攻击的方式,您需要禁用xml rpc,也许稍后还需要禁用rest api。

SO网友:Oliver Leach

不,它不应该干扰,我在那个块中有规则,它们都仍然是活动的,即使在更改永久链接结构之后。希望这有帮助。

结束