在PHP中修改.htaccess文件安全吗?

在PHP中修改.htaccess文件安全吗?,php,.htaccess,Php,.htaccess,在我的.htaccess文件中,当我进行更新时,我使用变量(SetEnv)来打开/关闭网站,是否安全,或者甚至可以通过PHP脚本修改该.htaccess文件 更具体地说,我需要注释/取消注释这些行: #RewriteCond %{REMOTE_ADDR} !LOCALIPHERE #RewriteCond %{REQUEST_URI} !^/Site/maintenance.htm #RewriteCond %{REQUEST_URI} !^/Site/styles/style.css #Rew

在我的.htaccess文件中,当我进行更新时,我使用变量(
SetEnv
)来打开/关闭网站,是否安全,或者甚至可以通过PHP脚本修改该.htaccess文件

更具体地说,我需要注释/取消注释这些行:

#RewriteCond %{REMOTE_ADDR} !LOCALIPHERE
#RewriteCond %{REQUEST_URI} !^/Site/maintenance.htm
#RewriteCond %{REQUEST_URI} !^/Site/styles/style.css
#RewriteCond %{REQUEST_URI} !^/Site/includes/jquery-1.4.4.min.js
#RewriteCond %{REQUEST_URI} !\.(jpg|jpeg|png|gif|swf)$
#RewriteRule ^.* /Site/maintenance.htm [L]
多谢各位

编辑:


我对safe的定义是:如果用PHP脚本打开.htaccess文件,同时访问网站,我想知道该网站将如何运行。

如果该文件可以通过PHP进程写入,则可以像其他文件一样修改


但是,与注释/取消注释代码不同,您应该使用
RewriteCond
检查您的环境变量。

如果该文件可由PHP进程写入,则可以像其他文件一样修改它


但是,您应该使用
RewriteCond
检查您的环境变量,而不是注释/取消注释您的代码。

只要您知道您正在做的事情是安全的。但是,如果您手动编辑该文件,并且没有在脚本中反映这种情况,则很容易将其破坏。

只要您知道自己在做什么,它是安全的。但是,如果您手动编辑该文件,并且没有在脚本中反映这种情况,则很容易将其破坏。

我将评估考虑中的“安全修改”是否可靠,并且不会引入语法错误。为此,我建议您使用更具体的注释标记:

#<off>#RewriteCond %{RE...
##重写cond%{RE。。。
使用简单的字符串操作扫描和替换会更安全,从而降低在修改.htaccess文件时导致500错误的可能性。如果要启用/禁用不同类型的设置,请使用多个更具体的令牌

关于安全性本身,让它们在世界范围内可写与拥有世界范围内可写的php脚本或配置文件具有相同的含义。

我会衡量“修改安全性”正在考虑这样做是否可靠-不引入语法错误。为此,我建议您使用更具体的注释标记:

#<off>#RewriteCond %{RE...
##重写cond%{RE。。。
使用简单的字符串操作扫描和替换会更安全,从而降低在修改.htaccess文件时导致500错误的可能性。如果要启用/禁用不同类型的设置,请使用多个更具体的令牌


关于安全性本身,让它们在世界范围内可写与拥有世界范围内可写的php脚本或配置文件具有相同的含义。

伟大的解决方案。如果可能,我能得到一个简单的示例吗?请参阅-“
%{ENV:variable}”
,其中变量可以是任何环境变量,也可以使用。这可以通过内部Apache结构进行查找,如果没有找到,可以通过Apache服务器进程中的getenv()进行查找。“很好的解决方案。如果可能,我可以得到一个简单的示例吗?请参阅-”
%{ENV:variable}
,其中变量可以是任何环境变量,也可用。这可以通过内部Apache结构和(如果没有找到)Apache服务器进程中的getenv()进行查找。“您应该使用原子写入,然后
文件\u put\u内容(“.htaccess”,$settings,LOCK\u EX)
或者更好的
重命名()
。因此,Apache只有在文件完全写入后才会重新读取该文件。@mario+1,这里有很好的提示,还有一条非常好的信息。如果文件被锁定,那么所有连接都将挂起,直到文件被释放,因为在执行php之前必须继续.htaccess文件。我说得对吗?请记住,新的.htaccess必须完美。任何语法错误,你的整个站点都会死掉,因为Apache会因为错误的指令而开始抛出500个内部错误在损坏的.htaccess中,只有当Apache也在LOCK\u SH模式下读取时,LOCK\u EX才会起作用。我相信大多数版本都会这样做,但还没有检查。重命名将更加文件系统原子化。--但是,是的,.htaccess是在调用PHP之前处理的。您应该使用原子写入然后
文件内容(“.htaccess”,$settings,LOCK_EX)
或者更好的
rename()
。因此,Apache只有在文件完全写入后才会重新读取该文件。@mario+1,这里有很好的提示,还有一条非常好的信息。如果文件被锁定,那么所有连接都将挂起,直到文件被释放,因为在执行php之前必须继续.htaccess文件。我说得对吗?请记住,新的.htaccess必须完美。任何语法错误,你的整个站点都会死掉,因为Apache会因为错误的指令而开始抛出500个内部错误在损坏的.htaccess中,只有当Apache也在LOCK_SH模式下读取它时,LOCK_EX才会起作用。我相信大多数版本都会这样做,但没有检查。重命名将更加文件系统原子化。--但是,是的,.htaccess是在调用PHP之前处理的。