用PHP编辑.htaccess

时间:2012-01-17 18:33:41

标签: 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文件的内容并使用PHP脚本添加到它们中。

3 个答案:

答案 0 :(得分:4)

这可能适用于您的情况:

修改.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权限和脚本权限。

答案 1 :(得分:4)

正如上面其中一条评论中所建议的,最好在这里使用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]
    
  4. 实际上,所有这些方法都是让这些重定向到位:

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

    优势:通过此设置,您可以根据需要编辑或重新创建文件/path/to/domain-dir.txt,而无需打开巨大的安全漏洞,允许使用php代码o直接编辑.htaccess。

答案 2 :(得分:1)

您可以使用以下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。