Редактировать.htaccess с PHP

У меня есть .htaccess, который сопоставляет домен с папкой.

RewriteEngine On
RewriteBase /

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

есть ли способ редактировать / добавлять дополнительные карты домена в файл с помощью PHP?

просто, я хочу получить содержимое .файл htaccess и добавить к ним с помощью php-скрипта.

3 ответов


как было предложено в одном из комментариев выше, лучше использовать 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. добавьте эти строки в свой .реврайт файл:

    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-код o редактировать .htaccess непосредственно.


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

Ammend .htaccess выглядеть следующим образом:

RewriteEngine On
RewriteBase /

# redirect mapped domain
ReWriteCond %{HTTP_HOST} joshblease.uk.to
ReWriteCond %{REQUEST_URI} !gme-index/
ReWriteRule ^(.*)$ gme-index/ [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 privledges и разрешения скрипта.


вы можете использовать следующий htaccess для сопоставления любого домена, кроме maindomain.com в папку с тем же именем, что и имя домена.

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

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

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

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