Redirect 301 /index.php/ /index.php
This works OK-ish. It won't affect any other
index.php in a subdirectory. However, it will redirect more than just
Redirect directive (part of mod_alias) is prefix matching, so the above
Redirect will also match
/index.php/<something>. And everything after the match, ie.
<something>, is copied onto the end of the target URL. However, since you have omitted the trailing slash from the target URL, this will become
/index.php<something>, which will likely result in a 404.
The fact that
/index.php/<something> would result in a 404 (as opposed to a valid request) is probably a good thing, since you don't want to run the risk of
/index.php/<something> (or the target) being indexed. However, you could change this so that
/<anything>) simply redirects to
/index.php by using the
RedirectMatch directive instead:
RedirectMatch 301 ^/index\.php. /index.php
RedirectMatch directive takes a regex. The trailing unescaped
. (dot) on the pattern matches any character.
If you wanted to match only
/index.php/ (exactly) then change this to:
RedirectMatch 301 ^/index\.php/$ /index.php
NB: This is assuming you are not already using mod_rewrite (ie.
RewriteRule) for other redirects/rewrites. It is advisable not to mix redirects from both modules, to avoid potential conflicts.
/something) on the end of a valid filename is called additional pathname information (aka path info / PATH_INFO).
If in the future, you wanted to block all requests that contain path info then you can add the following directive to your server config (or
This will result in all requests that contain path info resulting in a 404.
However, bear in mind that some CMS use path info for routing the URL.