Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/amazon-s3/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
使用PHP编辑.htaccess_Php_.htaccess_Mapping_Dns_Edit - Fatal编程技术网

使用PHP编辑.htaccess

使用PHP编辑.htaccess,php,.htaccess,mapping,dns,edit,Php,.htaccess,Mapping,Dns,Edit,我有一个.htaccess,可以将域映射到文件夹 RewriteEngine On RewriteBase / # redirect mapped domain ReWriteCond %{HTTP_HOST} joshblease.uk.to ReWriteCond %{REQUEST_URI} !gme-index/ ReWriteRule ^(.*)$ gme-index/$1 [L] 是否有任何方法可以使用PHP编辑/添加额外的域映射到文件 简单地说,我想获取.htaccess文件的

我有一个.htaccess,可以将域映射到文件夹

RewriteEngine On
RewriteBase /

# redirect mapped domain
ReWriteCond %{HTTP_HOST} joshblease.uk.to
ReWriteCond %{REQUEST_URI} !gme-index/
ReWriteRule ^(.*)$ gme-index/$1 [L]
是否有任何方法可以使用PHP编辑/添加额外的域映射到文件


简单地说,我想获取.htaccess文件的内容,并使用PHP脚本添加到其中。

这可能适用于您的情况:

amend.htaccess以查看以下内容:

RewriteEngine On
RewriteBase /

# redirect mapped domain
ReWriteCond %{HTTP_HOST} joshblease.uk.to
ReWriteCond %{REQUEST_URI} !gme-index/
ReWriteRule ^(.*)$ gme-index/$1 [L]

###CUSTOM RULES###
假设$rules的php脚本保存要修改的新生成的规则

$htaccess = file_get_contents('/path/to/.htaccess');
$htaccess = str_replace('###CUSTOM RULES###', $rules."\n###CUSTOM RULES###", $htaccess);
file_put_contents('/path/to/.htaccess', $htaccess);

上面的示例是理论,尚未测试,将取决于脚本的.htaccess特权和权限。

您可以使用以下htaccess将除
maindomain.com
之外的任何域映射到与域名同名的文件夹

RewriteCond %{ENV:REDIRECT_STATUS} ^$
ReWriteCond %{HTTP_HOST} !maindomain.com
ReWriteCond %{HTTP_HOST} (.*)
ReWriteRule ^(.*)$ %1/$1 [L]
或者;将文件夹映射到域名,而不使用ltd

RewriteCond %{ENV:REDIRECT_STATUS} ^$
ReWriteCond %{HTTP_HOST} !maindomain.com
ReWriteCond %{HTTP_HOST} ^([^\.]*)
ReWriteRule ^(.*)$ %1/$1 [L]

这不完全是您想要的,但它可能适合您,并且不需要任何php。

正如上面的一条评论所建议的,最好在这里用于您的案例,而不是直接尝试从php代码编辑.htaccess。以下是如何使用它的示例:

  • 在httpd.conf文件中添加以下行:

    RewriteMap domainMap txt://path/to/domain-dir.txt
    
  • 将文本文件创建为
    /path/to/domain dir.txt
    ,如下所示:

    sub1 /subdir1
    sub2 /foodir2
    foo /bar
    
  • 在.htaccess文件中添加以下行:

    Options +FollowSymLinks -MultiViews
    RewriteEngine on
    RewriteCond %{HTTP_HOST} ^(.*)\.domain\.com$ [NC]
    RewriteRule ^$ ${domainMap:%1} [L,R]
    
  • 实际上,所有这些方法都是将这些重定向设置到位:

    • sub1.domain.com/=>sub1.domain.com/subdir1
    • sub2.domain.com/=>sub2.domain.com/foodir2
    • foo.domain.com/=>foo.domain.com/bar

    优势:有了此设置,您可以从php代码中编辑或重新创建文件
    /path/to/domain dir.txt
    ,而无需打开一个巨大的安全漏洞。允许php代码直接编辑.htaccess。

    @Cyclone:如果操作正确,就不会有安全风险。简单地说,假设您的php脚本是web脚本,让web脚本更新web服务器配置(即.htaccess)是一个潜在的安全灾难。有时这可能无法避免,但要小心行事。是的,你试过什么?如果你没有这方面的经验,你应该设置一个
    RewriteMap
    ,它更容易附加,而不会出现语法问题。@ConradShultz:我认为你无法比较这些。编辑真实配置文件需要root权限,而.htaccess文件通常由PHP脚本可以访问的用户拥有。因此恶意/有缺陷的脚本无论如何都可以编辑它们。@ThiefMaster:htaccess会把事情搞砸的程度在很大程度上取决于其他变量(例如AllowOverride)。我们不知道在这种情况下是如何设置的。此外,我的.htaccess文件在Apache中是显式不可写的,因此恶意脚本无法因此对其进行编辑。没有httpd.conf文件,还有其他方法可以这样做吗?我在共享主机上。不幸的是没有,因为
    RewriteMap
    指令只进入httpd.conf文件。然而,这只是httpd.conf中的一次更改。