【问题标题】:Laravel remove public from url on localhostLaravel 从 localhost 的 url 中删除 public
【发布时间】:2021-05-11 01:33:42
【问题描述】:

在生产中,我有域 http://xxxx.com。 在根文件夹中我添加了.htaccess:

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

    RewriteEngine On
    RewriteCond %{REQUEST_URI} !^/public/
    RewriteRule ^(.*)$ /public/$1 [L,QSA]
</IfModule>

当我在浏览器中输入:http://xxxx.com 就可以了。

我机器上的.htaccess 文件相同。我使用 XAMPP。它不起作用。当我输入时:

http://localhost:8082/myfolder 

我得到 404。当我输入时:

http://localhost:8082/myfolder/public

它有效。 我的主机和本地机器上的 url 有什么区别?


对于第一个答案: 这是一个屏幕,也许我做错了什么(.htaccess 在根文件夹中),也许 .htaccess 在公共文件夹中是错误的:

【问题讨论】:

    标签: laravel apache .htaccess mod-rewrite


    【解决方案1】:

    这应该适合你:

    <IfModule mod_rewrite.c>
        <IfModule mod_negotiation.c>
            Options -MultiViews -Indexes
        </IfModule>
    
        RewriteEngine On
    
        RewriteRule !^public/ public%{REQUEST_URI} [L,NC]
    </IfModule>
    

    你的规则的问题是你正在检查这个条件:

    RewriteCond %{REQUEST_URI} !^/public/
    

    实际上是从 Web 根目录检查 URI /public,但是您的网站位于本地的子文件夹中。这里RewriteRule !^public/ 将检查public/ 在当前目录上下文之后的开头是否不存在,这在站点根目录以及子目录中的工作方式相同。

    同样,对于重写,请确保在 public/ 之前不要使用 / 以允许它使用相对路径。

    【讨论】:

    • 感谢您的回复,但现在当我输入 localhost:8082/xxxx/ 时,它会将 url 更改为 localhost:8082/xxxx/public/xxxx/ 并得到 404
    • 您的 .htaccess 应该放在根文件夹还是公共文件夹?
    • 这个 .htaccess 应该放在根目录下,这不会改变 URL,它只会重写。在新浏览器中测试或清除浏览器缓存。尝试使用新 URL 进行测试,即 localhost:8082/foo123/
    猜你喜欢
    • 2016-07-30
    • 2020-06-07
    • 2015-11-17
    • 2015-01-14
    • 1970-01-01
    • 1970-01-01
    • 2020-10-09
    • 2016-03-06
    • 2017-09-28
    相关资源
    最近更新 更多