Ad

Htaccess Redirect All Pages To Subdirectory Except Root

- 1 answer

enter image description hereI have these files in my root, Inside pages i have php files for example projects.php, I tried writing in .htaccess rules to take the file for example xxx.com/projects to open the file from /pages/projects.php and it worked with the following

RewriteEngine On

RewriteCond %{ENV:REDIRECT_STATUS} . [OR]
RewriteCond %{REQUEST_FILENAME} -f
RewriteRule ^ - [L]

# No file extension on request then append .php and rewrite to subdir
RewriteCond %{REQUEST_URI} /(.+)
RewriteRule !\.[a-z0-4]{2,4}$ /pages/%1.php [NC,L]

# All remaining requests simply get rewritten to the subdir
RewriteRule (.*) /pages/$1 [L]

My problem here is when i go to the root xxx.com instead of opening index.php its opening pages directory but if i go explicitely to xxx.com/index.php it works. I dont want index.php to be shown in the url i need to exclude the root from my rule and make it open index.php while the url stays xxx.com

Ad

Answer

# All remaining requests simply get rewritten to the subdir
RewriteRule (.*) /pages/$1 [L]

To exclude "the root" being rewritten to /pages/ (and serve index.php from the root instead) you can simply change the quantifier in the last rule from * (0 or more) to + (1 or more) - so that it doesn't match requests for the root (an empty URL-path in .htaccess).

In other words:

RewriteRule (.+) /pages/$1 [L]

Incidentally, you have already done something similar in the preceding rule/condition by using + in the CondPattern, ie. RewriteCond %{REQUEST_URI} /(.+).

Ad
source: stackoverflow.com
Ad