Редактировать .htaccess с PHP - PullRequest
7 голосов
/ 17 января 2012

У меня есть .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 ]

4 голосов
/ 18 января 2012

Как предлагается в одном из комментариев выше, лучше использовать RewriteMap для вашего случая, а не пытаться редактировать .htaccess из PHP-кода напрямую.Вот пример того, как его использовать:

  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

Преимущество: С этой настройкой вы можете редактировать или воссоздавать файл /path/to/domain-dir.txt столько раз, сколько хотите, из своего php-кода, не открывая огромную дыру в безопасности, позволяющую php-коду редактировать .htaccess напрямую.

4 голосов
/ 17 января 2012

Это может работать для вашей ситуации:

Измените .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 голос
/ 17 января 2012

Вы можете использовать следующий 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.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...