Search code examples
php.htaccessmod-rewritepretty-urls

My mod_rewrite rules aren't rewriting as expected


Couldn't find an answer for this on S.O. (Sorry if duplicate)

[localhost]/MySites/.htaccess:

RewriteCond %{REQUEST_FILENAME} !-f
RewriteRule (.*) compiler.php?id=$1

Request for //localhost/MySites/Example.com/ works on my browser.

Request for //localhost/MySites/Example.com (no trailing slash '/') redirects (address bar actually changes) to //localhost/MySites/Example.com/?id=Example.com with a trailing /?id=Example.com.

Why is it doing that? Defeats the purpose of "pretty URLs".


Solution

  • You can use:

    DirectorySlash Off 
    DirectoryIndex index.php index.html 
    RewriteEngine on 
    RewriteBase /MySites/ 
    
    # add a trailing slash for directories 
    RewriteCond %{REQUEST_FILENAME} -d
    RewriteCond %{REQUEST_FILENAME} !-f
    RewriteRule ^(.*[^/])$ /$1/ [L,R=301]
    
    RewriteCond %{REQUEST_FILENAME} !-f
    RewriteRule (.*) compiler.php?id=$1 [L,QSA]