meghshah
meghshah

Reputation: 85

.htaccess doesn't work properly

i have .htaccess file which includes below code.

RewriteEngine on
RewriteCond %{REQUEST_FILENAME} !-f 
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule ^(.*)$ index.php?q=$1 [L]
RewriteRule ^imagefactory/(.*)$ imagefactory/index.php?q=$1 [QSA]

i want .htaccess file which fulfill below requirements. if 1) url/admin then go to the admin folder and choose it's .htaccess file 2) url/imagefactory then go to the imagefactory folder and choose it's file called index.php 3) url/ then it choose root directory's index.php file

Upvotes: 1

Views: 317

Answers (3)

Shoogle
Shoogle

Reputation: 206

Try This

RewriteEngine on
RewriteRule ^imagefactory/(.*)$ imagefactory/index.php?q=$1 [QSA]
RewriteRule ^admin/.$ - [PT]
RewriteCond %{REQUEST_FILENAME} !-f 
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule ^(.*)$ index.php?q=$1

Upvotes: 1

maskie
maskie

Reputation: 456

The .htaccess file is read in sequence. The RewriteCond are only meant for one rule.

Therefore all you need is:

RewriteEngine on

RewriteCond %{REQUEST_FILENAME} !-f 
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule ^imagefactory/(.*)$ imagefactory/index.php?q=$1 [QSA, L]

RewriteCond %{REQUEST_FILENAME} !-f 
RewriteCond %{REQUEST_FILENAME} !-d
RewriteCond %{REQUEST_URI}  !^/admin/(.*)$
RewriteRule ^(.*)$ index.php?q=$1 [QSA, L]

The second block is a catch all so that if its not from directory admin, use the default root index.php.

Upvotes: 0

AVee
AVee

Reputation: 3402

You should place the last rule 1 position up. This rule RewriteRule ^(.*)$ index.php?q=$1 [L] will match anything, and the [L] attribute there means not other rules will be evaluated when it matches. If you reorder it like below it should work.

RewriteEngine on
RewriteCond %{REQUEST_FILENAME} !-f 
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule ^imagefactory/(.*)$ imagefactory/index.php?q=$1 [QSA]
RewriteRule ^(.*)$ index.php?q=$1

Upvotes: 0

Related Questions