У меня есть .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-кода. Вот пример того, как его использовать:
Добавьте следующую строку в файл httpd.conf:
RewriteMap domainMap txt://path/to/domain-dir.txt
Создайте текстовый файл как /path/to/domain-dir.txt
следующим образом:
sub1 /subdir1 sub2 /foodir2 foo /bar
Добавьте эти строки в файл .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.