I have an index.php controller what all URLs that aren't existing files redirect to. The .htaccess rules I currently have look like this:
RewriteEngine On
DirectorySlash Off
# Remove Trailing Slashes
RedirectMatch 302 ^(.*)/$ $1
# Remove WWW
RewriteCond %{HTTP_HOST} ^www\.(.+)$ [NC]
RewriteRule ^ http://%1%{REQUEST_URI} [R=302]
# Reroute to index.php
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule ^(.*)$ index.php/$1 [L,QSA]
What I want to do is use a 301 redirect if index.php is included in the URL. BUT! I can't use RewriteBase or queries that start with a slash because the webapp I'm developing could be in a subfolder. So basically, I only want to rewrite for the current directory:
example.com/foo/index.php/bar/whatever should redirect to example.com/foo/bar/whatever example.com/foo/index/bar/whatever should also redirect to example.com/foo/bar/whatever
localhost/place/foo/index.php/bar/whatever should redirect to localhost/place/foo/bar/whatever localhost/place/foo/index/bar/whatever should also redirect to localhost/place/foo/bar/whatever
How can I accomplish this with .htaccess?
UPDATED CODE: Everything here works EXCEPT: index.php is not removed from anywhere in the URL.
Here's the code:
<IfModule mod_rewrite.c>
RewriteEngine On
DirectorySlash Off
# Remove WWW
RewriteCond %{HTTP_HOST} ^www\.(.+)$ [NC]
RewriteRule ^ http://%1%{REQUEST_URI} [R=302,L]
# Remove Trailing Slashes
RewriteCond %{REQUEST_FILENAME} !-d
RewriteCond %{THE_REQUEST} \s(.+?)/+[?\s]
RewriteRule ^ %1 [R=302,L]
# Reroute to index.php
#RewriteCond $1 !^(index\.php)
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule ^(.*)$ index.php?cURL=/$1 [L,QSA]
</IfModule>