Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

Edit .htaccess with PHP

I have a .htaccess that maps a domain to a folder.

RewriteEngine On
RewriteBase /

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

Is there any way to edit/add extra domain maps to the file using PHP?

Simply, I want to get the contents of the .htaccess file and add to them using a PHP script.

like image 417
Blease Avatar asked Jan 17 '12 18:01

Blease


People also ask

How do I edit a .htaccess file?

Right-click on the file and click on Code Edit from the menu. (Alternatively, you can click on the icon for the . htaccess file and then click on the "Code Editor" icon at the top of the page.)

Where is .htaccess file in PHP?

htaccess file is placed in a directory which in turn loaded via the Apache web server, then the . htaccess file detected and executed by the Apache server software.

Can I edit the .htaccess file by FTP or Shell?

There are many ways to edit an . htaccess file. Edit the file on your computer and upload it to the server via FTP. Use an FTP program's "Edit" mode that allows you to edit a file remotely.

Is htaccess a PHP file?

The . htaccess (Hypertext Access) file is an Apache distributed server configuration file.


2 Answers

As suggested in one of the comments above it is better to use RewriteMap for your case here rather than trying to edit .htaccess from PHP code directly. Here is a sample how to use it:

  1. Add following line to your httpd.conf file:

    RewriteMap domainMap txt://path/to/domain-dir.txt
    
  2. Create a text file as /path/to/domain-dir.txt like this:

    sub1 /subdir1
    sub2 /foodir2
    foo /bar
    
  3. Add these line in your .htaccess file:

    Options +FollowSymLinks -MultiViews
    RewriteEngine on
    RewriteCond %{HTTP_HOST} ^(.*)\.domain\.com$ [NC]
    RewriteRule ^$ ${domainMap:%1} [L,R]
    

Effectively all this means is to have these redirects in place:

  • sub1.domain.com/ => sub1.domain.com/subdir1
  • sub2.domain.com/ => sub2.domain.com/foodir2
  • foo.domain.com/ => foo.domain.com/bar

Advantage: With this setup in place, you can edit or recreate the file /path/to/domain-dir.txt as much as you want from your php code without opening a huge security hole be allowing php code o edit .htaccess directly.

like image 77
anubhava Avatar answered Oct 20 '22 10:10

anubhava


This could work for your situation:

Ammend the .htaccess to look the following:

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 script assuming $rules holds the new generated rules to be ammended;

$htaccess = file_get_contents('/path/to/.htaccess');
$htaccess = str_replace('###CUSTOM RULES###', $rules."\n###CUSTOM RULES###", $htaccess);
file_put_contents('/path/to/.htaccess', $htaccess);

example above is theory and has not been tested, would be dependant upon .htaccess privledges and permissions of the script.

like image 36
Jason Brumwell Avatar answered Oct 20 '22 11:10

Jason Brumwell