添加尾部斜杠后,Laravel 在 URL 中恢复为 /public/
Laravel reverts to /public/ in URLs when trailing slashes are added
这是根目录中我的 .htaccess
,应该从 URLs:
中删除“public”
<IfModule mod_rewrite.c>
RewriteEngine On
RewriteRule ^(.*)$ public/ [L]
</IfModule>
这是我在 public 目录中的 .htaccess
,应该去掉结尾的斜线:
<IfModule mod_rewrite.c>
# Redirect Trailing Slashes If Not A Folder...
RewriteCond %{REQUEST_FILENAME} !-d
RewriteCond %{REQUEST_URI} (.+)/$
RewriteRule ^ %1 [L,R=301]
</IfModule>
这一切都很好,只是当我输入带有尾部斜杠的 URL 时,它会重定向回没有尾部斜杠的 URL,但也带有 /public
添加。
例如,我们有这条路线:
Route::get('/de', 'HomeController@index')->name('home');
通常,URL 看起来像域。com/de。
但是,如果我在浏览器中输入 domain.com/de/
,它会重定向到 domain.com/public/de
而不是 domain.com/de
- 并且页面会正常加载。
我该如何解决这个问题?
Apache/Nginx 应该指向 public 目录而不是 项目根目录 .
这样您就不需要添加任何 .htaccess 规则来删除 URL 中的“public”字符串
您的网站根目录 .htaccess 应该是这样的:
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/ [L]
然后在public/.htaccess
里面有这个代码:
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]
确保在测试此更改之前完全清除浏览器缓存。
这是根目录中我的 .htaccess
,应该从 URLs:
<IfModule mod_rewrite.c>
RewriteEngine On
RewriteRule ^(.*)$ public/ [L]
</IfModule>
这是我在 public 目录中的 .htaccess
,应该去掉结尾的斜线:
<IfModule mod_rewrite.c>
# Redirect Trailing Slashes If Not A Folder...
RewriteCond %{REQUEST_FILENAME} !-d
RewriteCond %{REQUEST_URI} (.+)/$
RewriteRule ^ %1 [L,R=301]
</IfModule>
这一切都很好,只是当我输入带有尾部斜杠的 URL 时,它会重定向回没有尾部斜杠的 URL,但也带有 /public
添加。
例如,我们有这条路线:
Route::get('/de', 'HomeController@index')->name('home');
通常,URL 看起来像域。com/de。
但是,如果我在浏览器中输入 domain.com/de/
,它会重定向到 domain.com/public/de
而不是 domain.com/de
- 并且页面会正常加载。
我该如何解决这个问题?
Apache/Nginx 应该指向 public 目录而不是 项目根目录 .
这样您就不需要添加任何 .htaccess 规则来删除 URL 中的“public”字符串
您的网站根目录 .htaccess 应该是这样的:
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/ [L]
然后在public/.htaccess
里面有这个代码:
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]
确保在测试此更改之前完全清除浏览器缓存。