Edit .htaccess with PHP


Edit .htaccess with PHP

我有一个.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脚本添加到其中。

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

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

    RewriteMap domainMap txt://path/to/domain-dir.txt
    
  2. 创建一个文本文件作为/path/to/domain-dir.txt,如下所示:

    sub1 /subdir1
    sub2 /foodir2
    foo /bar
    
  3. 在.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。

这可能适用于您的情况:

Ammand的.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###

php脚本假定$rules保存要修改的新生成的规则;

$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]

或者;在没有有限公司的情况下将文件夹映射到域名

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

这并不是你想要的,但它可能对你有用,而且不需要任何php。