You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Laravel项目Apache部署下URL重定向404问题求助

Laravel项目Apache部署下网络共享文件夹跳转404问题

我在使用Apache服务器的Laravel项目中遇到以下问题:

  • 代码中通过$directory = "\\fileserver\public\office\technology";和scandir($directory);访问网络共享文件夹,生成的链接/office/technology显示正常,但点击跳转时出现Apache 404错误。
  • 已启用mod_rewrite模块,用php artisan serve运行项目时一切正常,怀疑是.htaccess或httpd-vhosts.conf配置错误,附上两个配置文件内容:

.htaccess 配置

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

    RewriteEngine On

    # Handle Authorization Header
    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]

    # Send Requests To Front Controller...
    RewriteCond %{REQUEST_FILENAME} !-d
    RewriteCond %{REQUEST_FILENAME} !-f
    RewriteRule ^ index.php [L]
</IfModule>

httpd-vhosts.conf 配置

<VirtualHost *:80>
    ServerName test.vr.it
    DocumentRoot "C:/xampp/htdocs/intranet/public"
    ErrorLog "logs/test.vr.it-error.log"
    <Directory "C:/xampp/htdocs/intranet/public">
        Options FollowSymLinks
        AllowOverride All
        Require all granted
    </Directory>
</VirtualHost>

解决方案

1. 问题根源

php artisan serve作为PHP内置服务器,会把所有请求直接交给Laravel路由处理;但Apache会优先检查请求路径是否为本地存在的文件/目录。当点击/office/technology时,Apache会去项目public目录下查找对应文件夹,找不到就直接返回404,不会转发给Laravel处理。

2. 调整Apache配置,让共享路径请求交给Laravel

方法一:修改.htaccess

在现有Rewrite规则前,添加规则指定/office/technology路径直接转发给Laravel:

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

    RewriteEngine On

    # 新增规则:将/office/technology相关请求交给Laravel处理
    RewriteRule ^office/technology(.*)$ index.php [L]

    # Handle Authorization Header
    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]

    # Send Requests To Front Controller...
    RewriteCond %{REQUEST_FILENAME} !-d
    RewriteCond %{REQUEST_FILENAME} !-f
    RewriteRule ^ index.php [L]
</IfModule>

方法二:修改httpd-vhosts.conf

在VirtualHost的Directory块中添加FallbackResource,让所有不存在的路径都转发给Laravel:

<VirtualHost *:80>
    ServerName test.vr.it
    DocumentRoot "C:/xampp/htdocs/intranet/public"
    ErrorLog "logs/test.vr.it-error.log"
    <Directory "C:/xampp/htdocs/intranet/public">
        Options FollowSymLinks
        AllowOverride All
        Require all granted
        # 新增:所有不存在的请求转发到index.php
        FallbackResource index.php
    </Directory>
</VirtualHost>

3. 补全Laravel路由处理

在routes/web.php中添加对应路由,确保请求能被Laravel正确处理:

Route::get('/office/technology', function () {
    // 注意:网络路径需要双反斜杠转义
    $directory = "\\\\fileserver\\public\\office\\technology";
    $files = scandir($directory);
    return view('office.technology', compact('files'));
});

4. 验证配置

修改完成后重启Apache服务器,清除浏览器缓存,再测试跳转是否正常。

内容的提问来源于stack exchange,提问作者Cressi

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.25 04:35:57