Изменить .htaccess с помощью 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 для вашего случая здесь, а не пытаться напрямую редактировать .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.

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

    Измените .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] 

    в качестве альтернативы; для сопоставления папки с именем домена без ltd.

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

    Не совсем то, что вы хотели, но это может сработать для вас и не нуждается в php.