Ubuntu 18.04下Apache自动添加末尾斜杠问题求助
Ubuntu 18.04下Apache自动添加末尾斜杠问题求助
看起来你碰到的是Apache默认的目录斜杠自动追加行为,这是mod_dir模块在背后起作用——它会自动检测请求的路径是否对应一个实际存在的目录,如果匹配就会触发301重定向,给路径加上末尾的斜杠,而且这个模块的优先级默认比mod_rewrite高,所以你的PHP重写规则还没生效,就先被它改了路径。
给你几个可行的解决方案,你可以一步步试:
方案一:在.htaccess中关闭自动追加斜杠
直接在你的.htaccess里添加DirectorySlash Off来禁用mod_dir的这个行为,同时可以补充规则处理真实目录的访问(可选,如果你需要目录也能正常打开):
RewriteEngine On DirectorySlash Off # 可选:如果请求的是真实存在的目录,手动添加斜杠(保持目录访问的正常逻辑) RewriteCond %{REQUEST_FILENAME} -d RewriteRule ^(.*)$ $1/ [L] # 你的PHP文件重写规则 RewriteCond %{REQUEST_FILENAME} !-d RewriteCond %{REQUEST_FILENAME}.php -f RewriteRule ^(.*)$ $1.php [L]
方案二:修改虚拟主机配置(更高效)
因为.htaccess是每个请求都会解析,而虚拟主机配置是全局生效的,你可以直接在虚拟主机的目录块里添加DirectorySlash Off:
<VirtualHost *:80> ServerAdmin webmaster@localhost DocumentRoot /var/www/webtrade <Directory /var/www/webtrade> Options Indexes FollowSymLinks MultiViews AllowOverride All Require all granted DirectorySlash Off # 关闭自动追加斜杠 </Directory> # 其他原有配置... </VirtualHost>
修改完记得重启Apache生效:
sudo systemctl restart apache2
额外注意点
如果你的Apache启用了mod_negotiation(也就是配置里的MultiViews选项),它可能也会干扰重写逻辑。如果不需要这个功能,可以把MultiViews从Options里去掉,或者改成MultiViews Off。
如果试了上面的方法还是不行,建议去看Apache的错误日志(路径一般是/var/log/apache2/error.log),里面的日志信息能帮你更快定位问题~
备注:内容来源于stack exchange,提问作者Andrei Claudiu Viziru
相关产品推荐
相关产品推荐

