使用 PHP 动态添加到 .htaccess 文件?

Posted

技术标签:

【中文标题】使用 PHP 动态添加到 .htaccess 文件?【英文标题】:Use PHP to Dynamically Add To .htaccess File? 【发布时间】:2011-09-15 13:04:51 【问题描述】:

我想做的是自动化网站上线的过程。这些网站都是使用htaccess动态创建的,这里举个例子:

RewriteCond %ENV:REDIRECT_STATUS ^$
RewriteCond %HTTP_HOST ^(www\.)?domain\.com$ [NC]
RewriteRule ^(.*)$ /folder%REQUEST_URI?%QUERY_STRING [QSA,L]

我所做的是为 domain.com 添加一个域别名,然后将其指向我的服务器 IP,然后 htaccess 文件使其查看 / 文件夹中的内容。

它运行良好,但我们计划拥有数百个网站,并且手动将 sn-p 代码添加到 htaccess 会很烦人。由于我要更改的只是 domain.com/folder,如果我创建一个表单并告诉它域和文件夹,它会将其添加到 htaccess 文件的底部?

这样可以节省很多时间。

非常感谢。

【问题讨论】:

是的,这是可能的,但要注意安全风险和重复条目。 【参考方案1】:

当然。只要进程有权写入文件,它就只是另一个文件。

【讨论】:

【参考方案2】:

我真的不建议允许 phpANYTHING 添加到 .htaccess 中,这是一个很大的安全风险。

//but here is your code
$f = fopen(".htaccess", "a+");
fwrite($f, "your content");
fclose($f);

【讨论】:

@mario:你没看到那么大的“我真的不建议允许 php 将 ANYTHING 添加到 .htaccess 中,这是一个很大的安全风险”?没有代码,我的答案将被删除 @mario:我说“我不建议这样做”。如果总是一个很大的风险,甚至一个小错误都可能是网络钓鱼的天堂 @mario:当然你可以添加任何你想添加的东西,但如果是用户的输入就不行。 好吧,好吧。我收回“未经证实的”。它只是含糊不清,不适用于 OPs 案例。【参考方案3】:

给你:

function writeht($domain, $folder)

    $fp = fopen('.htaccess','a+');
    if($fp)
    
        fwrite($fp,'

RewriteCond %ENV:REDIRECT_STATUS ^$
RewriteCond %HTTP_HOST ^(www\.)?'.str_replace('.','\.',$domain).'$ [NC]
RewriteRule ^(.*)$ /'.$folder.'%REQUEST_URI?%QUERY_STRING [QSA,L]');
        fclose($fp);
    


//usage: writeht("domain.biz","yourfolder");

.htaccess 上具有0644 权限对我来说很好(因为php 在与文件所有者相同的用户下运行)

【讨论】:

非常感谢。这很好用。我知道这是一个很大的安全风险,会发生什么? 如果您觉得这有帮助,您可以接受答案。在您对 .htaccess 的权限保持 0644 之前,这不是安全风险。 (假设函数只会被信任的人调用) 好的,我接受了!不过有一个问题,它在 0644 对我不起作用,但在我做 0666 时它起作用。知道为什么吗? 666 的安全风险更大吗? 其实是的。通过设置 666,您允许所有人写入您的 .htaccess 文件。如果它在 644 不起作用,那是因为您的网络服务器在文件所有者(您)(例如 bob)之外的其他用户(例如,nobody)下运行 伙计,这段代码对我很有帮助,但我不想有任何安全问题。这仅对管理员(极少数人)可用,并且他们的输入选项有限。他们只有一个域名输入框,然后是文件夹的用户名下拉列表。【参考方案4】:

使用 PEAR 类 File_HtAccess 是一种非常舒适的方法。但如前所述,您不应使用可通过 web 访问的 PHP 脚本编写文件。

【讨论】:

以上是关于使用 PHP 动态添加到 .htaccess 文件?的主要内容,如果未能解决你的问题,请参考以下文章

apache htaccess 不会将 https://www 添加到除 inside.php 之外的任何页面

在htaccess中重写URL时添加.html?

使用 .htaccess 删除 .php 扩展名会重复我的页面吗?

HTACCESS 重写:忽略语言代码并将 index.php 添加到 url 而不更改它

.htaccess 读取服务器上任何动态子域的内部 index.php

使用 htaccess 从 index.php 重定向到 another.php 文件