skip to Main Content

This is my .htaccess in the root directory that’s supposed to get rid of "public" from URLs:

<IfModule mod_rewrite.c>
   RewriteEngine On
   RewriteRule ^(.*)$ public/$1 [L]
</IfModule>

This is my .htaccess in the public directory that’s supposed to get rid of trailing slashes:

<IfModule mod_rewrite.c>
    # Redirect Trailing Slashes If Not A Folder...
    RewriteCond %{REQUEST_FILENAME} !-d
    RewriteCond %{REQUEST_URI} (.+)/$
    RewriteRule ^ %1 [L,R=301]
</IfModule>

This is all well and good, except that when I enter a URL with a trailing slash, it redirect back to a URL with no trailing slash, but also with /public added.

For example, we have this route:

Route::get('/de', 'HomeController@index')->name('home');

Normally, the URL looks like domain.com/de.

But, if I type in domain.com/de/ into the browser, it redirects to domain.com/public/de instead of to domain.com/de – and the page loads as normal.

How do I fix this?

2

Answers


  1. Apache/Nginx should be pointing to the public directory instead of the project root.

    This way you don’t need to add any .htaccess rule to get rid of the "public" string in the URLs

    Login or Signup to reply.
  2. Your site root .htaccess should be like this:

    RewriteEngine On
    
    # remove trailing slash
    RewriteCond %{REQUEST_FILENAME} !-d
    RewriteCond %{REQUEST_URI} (.+)/$
    RewriteRule ^ %1 [L,R=301,NE]
    
    # route all requests to public/
    RewriteRule ^(.*)$ public/$1 [L]
    

    Then inside public/.htaccess have this code:

    RewriteEngine On
    
    # if /public/ is part of original URL then remove it
    RewriteCond %{THE_REQUEST} /public/(S*) [NC]
    RewriteRule ^ /%1 [L,NE,R=301]
    
    # Handle Front Controller...
    RewriteCond %{REQUEST_FILENAME} !-d
    RewriteCond %{REQUEST_FILENAME} !-f
    RewriteRule ^ index.php [L]
    

    Make sure to completely clear your browser cache before testing this change.

    Login or Signup to reply.
Please signup or login to give your own answer.
Back To Top
Search