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

URL重写异常:.htaccess配置下projet/1/storage返回404错误

解决.htaccess URL重写中projet/1/storage 404的问题

嘿,我之前也踩过类似的URL重写404坑,针对你遇到的projet/1/storage路径无法访问的问题,咱们一步步来排查可能的原因和解决办法:

1. 先确认Apache重写模块是否启用

这是最基础的前提,很多人容易忽略。如果是Ubuntu/Debian系统,直接在终端执行:

a2enmod rewrite

执行完后重启Apache:

systemctl restart apache2

如果是CentOS或者直接修改httpd.conf的情况,找到LoadModule rewrite_module modules/mod_rewrite.so这行,确保没有被注释掉,然后重启服务。

2. 确保.htaccess有权限生效

你的网站根目录对应的虚拟主机配置或者httpd.conf里,必须设置AllowOverride All(至少是AllowOverride FileInfo),否则.htaccess里的重写规则根本不会被Apache识别。举个虚拟主机配置的例子:

<Directory /var/www/your-site-root>
    AllowOverride All
    Require all granted
</Directory>

另外,.htaccess文件本身的权限要设置成Apache能读取的,比如:

chmod 644 .htaccess

3. 检查重写规则的匹配逻辑

大概率是你的规则没覆盖到projet/1/storage这种多级路径的情况。比如如果你的原规则是:

RewriteRule ^projet/([0-9]+)$ projet.php?id=$1 [L]

它只能匹配projet/1这种格式,没法匹配后面带/storage的路径。你需要调整规则来支持这种多级结构:

针对固定的/storage后缀

如果storage是固定的路径后缀,直接写针对性的规则(记得把这条放在更宽泛的规则前面,避免被先匹配):

RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule ^projet/([0-9]+)/storage$ projet_storage.php?id=$1 [L]

针对动态的二级路径

如果除了storage还有其他类似的二级路径,可以写更通用的规则:

RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule ^projet/([0-9]+)/([a-z]+)$ projet_handler.php?id=$1&action=$2 [NC,L]

这里的[NC]表示不区分大小写,[L]表示匹配到这条规则后就停止后续匹配。

4. 排除真实文件/目录的干扰

如果你的服务器上刚好存在真实的projet/1/storage目录或者文件,Apache会优先访问真实资源,而不走重写规则。上面的规则里已经加了RewriteCond %{REQUEST_FILENAME} !-f和RewriteCond %{REQUEST_FILENAME} !-d,就是为了排除这种情况——只有当请求的路径不是真实文件或目录时,才执行重写。

5. 开启重写日志精准排查

如果以上步骤都没解决问题,那就开启Apache的重写日志来追踪匹配过程。对于Apache 2.4及以上版本,在虚拟主机配置里添加:

LogLevel alert rewrite:trace3

然后重启Apache,访问projet/1/storage,之后查看Apache的错误日志(一般在/var/log/apache2/error.log或者对应路径),日志里会详细显示每一条规则的匹配情况,能帮你快速定位问题所在。

记得每次修改配置后都要重启Apache,确保新配置生效哦!

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.19 06:42:45