Редактировать.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-скрипта.
3 answers
Как было предложено в одном из комментариев выше, лучше использовать Карту перезаписи для вашего случая здесь, а не пытаться редактировать .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.