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