【问题标题】:How to remove 'public' from Laravel URL?如何从 Laravel URL 中删除“公共”?
【发布时间】:2021-08-08 16:26:18
【问题描述】:

我有一个默认的 laravel 8 项目。如果我使用“/public/”来访问路由,我只能访问我的文件,我不希望那样。我只想去 'localhost/ProjectName/Route' 而不是 'localhost/ProjectName/public/Route'。

我尝试过更改 .htacess,将其发送到 root,将 server.php 重命名为 index.php 以及我在网络上找到的一百万个其他解决方案。

<IfModule mod_rewrite.c>
<IfModule mod_negotiation.c>
    Options -MultiViews -Indexes
</IfModule>

RewriteEngine On

# Handle Authorization MemberHeader
RewriteCond %{HTTP:Authorization} .
RewriteRule .* - [E=HTTP_AUTHORIZATION:%{HTTP:Authorization}]

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

# Remove public URL from the path
RewriteCond %{REQUEST_URI} !^/public/
RewriteRule ^(.*)$ /public/$1 [L,QSA]

# Handle Front Controller...
RewriteCond %{REQUEST_FILENAME} !-d
RewriteCond %{REQUEST_FILENAME} !-f
RewriteRule ^ index.php [L]


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

这是我的过程

【问题讨论】:

  • 如果您在问题中显示您的路线会有所帮助。一种可能性是您定义了一个路由组,例如Route::name('public.')-&gt;group(function () { ...
  • 您使用的是哪个网络服务器?您应该将文档根目录设置为localhost/ProjectName/public
  • 为您的项目设置 VirtualHosts 或使用项目根文件夹中的 php artisan serve
  • 将您的.htaccess 重置为原来的状态。例如,如果您使用 WAMP,那么您可以这样做:codedecode.co.in/blog/wordpress/set-up-virtual-host-with-wamp 关键是当您设置虚拟主机时,您需要选择公用文件夹的路径。如果您在实时服务器上苦苦挣扎,那么同样的原则也适用,只需确保 Web 根目录是公用文件夹。

标签: laravel


【解决方案1】:

确保您的 web 服务器配置将公共目录设置为根文件夹,而不是 Laravel 项目的根文件夹。

【讨论】:

  • 在哪里可以查到?
  • 这将根据您的主机设置和您使用的 Web 服务器而有所不同。您如何托管网站?
【解决方案2】:

用以下代码替换您的.htaccess 文件。请注意,您不需要将 server.php 重命名为 index.php 或删除 /public 名称。只需在 .htaccess 文件中使用以下代码即可。

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

结果: website.com/public/routewebsite.com/route

如果您尝试在根目录的子文件夹中运行 laravel 项目,上述代码将无法运行。相反,请在您的 .htaccess 文件中使用以下代码。

<IfModule mod_rewrite.c>
<IfModule mod_negotiation.c>
    Options -MultiViews
</IfModule>
RewriteEngine On
RewriteCond %{REQUEST_FILENAME} -d [OR]
RewriteCond %{REQUEST_FILENAME} -f
RewriteRule ^ ^$1 [N]
RewriteCond %{REQUEST_URI} (\.\w+$) [NC]
RewriteRule ^(.*)$ public/$1
RewriteCond %{REQUEST_FILENAME} !-d
RewriteCond %{REQUEST_FILENAME} !-f
RewriteRule ^ server.php
</IfModule>

结果:website.com/sub-project/public/routewebsite.com/sub-project/route

【讨论】:

    猜你喜欢
    • 2015-06-09
    • 2017-02-27
    • 2016-06-09
    • 2019-03-30
    • 2013-03-13
    • 2015-04-06
    • 2020-08-31
    • 1970-01-01
    相关资源
    最近更新 更多