I am using htaccess to rewrite my URL’s… with codeigniter, to be specific. I Have two applications, one called “frontend”, the other called “admincp”. The front end application uses index.php with $application_folder changed to “frontend”. The admincp application uses a copied index.php, but renamed to admin.php. The $application_folder is changed to “admincp” in this file.
Basically, I want all URi’s that contain “admincp” as the first uri segment to be rewritten to the admin.php file instead of index.php. Then, all other URL’s to be rewritten as usual… to index.php.
mysite.com/admin/members would go to admin.php/members
mysite.com/articles/Some-Awesome-Articles would go to index.php/articles
I hope I have explained this well enough… Anyway, here is my current htaccess file, but it doesn’t seem to work. I get an internal server error.
# Deny OR Allow Folder Indexes.
# Since we disable access to PHP files you
# can leave this on without worries.
# OR better yet, create a .htaccess file in
# the dir you want to allow browsing and
# set it to +Indexes
Options -Indexes
Options +FollowSymLinks
# Set the default file for indexes
DirectoryIndex index.php
<IfModule mod_rewrite.c>
# mod_rewrite rules
RewriteEngine on
# The RewriteBase of the system (if you are using this sytem in a sub-folder).
# RewriteBase /CodeIgniter_1.6.3/
# This will make the site only accessible without the "www."
# (which will keep the subdomain-sensive config file happy)
# If you want the site to be accessed WITH the "www."
# comment-out the following two lines.
# RewriteCond %{HTTP_HOST} ^www\.site\.com$ [NC]
# RewriteRule ^(.*)$ http://site.com/$1 [L,R=301]
# If a controler can't be found - then issue a 404 error from PHP
# Error messages (via the "error" plugin)
# ErrorDocument 403 /index.php/403/
# ErrorDocument 404 /index.php/404/
# ErrorDocument 500 /index.php/500/
# Deny any people (or bots) from the following sites: (to stop spam comments)
# RewriteCond %{HTTP_REFERER} nienschanz\.ru [NC,OR]
# RewriteCond %{HTTP_REFERER} porn\.com
# RewriteRule .* - [F]
# Note: if you are having trouble from a certain URL just
# add it above to forbide all visitors from that site.
# You can also uncomment this if you know the IP:
# Deny from 192.168.1.1
# If the file is NOT the index.php file
RewriteCond %{REQUEST_FILENAME} !index.php
# Hide all PHP files so none can be accessed by HTTP
RewriteRule (.*)\.php$ index.php/$1
# If the file/dir is NOT real go to index
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule ^admin/(.*)$ admin.php/$1
RewriteRule ^(.*)$ index.php/$1
</IfModule>
# If Mod_ewrite is NOT installed go to index.php
<IfModule !mod_rewrite.c>
ErrorDocument 404 index.php
</IfModule>
The first rule that you have will rewrite
admin.phpitself, and it looks like you’re ending up with something like/index.php/admin.php. Also, the 2 conditions that check for!-fand!-donly get applied to theRewriteRule ^admin/(.*)$ admin.php/$1rule. Rewrite conditions only get applied to the single immediately following rewrite rule. So yourRewriteRule ^(.*)$ index.php/$1rule doesn’t have any conditions, and will blindly rewrite every URI. You also have no flags so rewriting continues right through to the end (thus clobbering any rewriting that you did before).You need to rearrange the rules: