Debian更新后网站含%20的链接失效,求Apache服务器端修复方案
解决含%20的链接失效问题:服务器端重定向+批量链接修改方案
一、服务器端批量重定向(无需修改页面)
Apache服务器(用.htaccess)
如果你的主机用Apache,直接在网站根目录创建/修改.htaccess文件,添加以下规则:
RewriteEngine On RewriteCond %{REQUEST_URI} "%20" RewriteRule ^(.*)%20(.*)$ $1_$2 [L,R=301]
这条规则会自动把所有带%20的请求URL替换成下划线版本,返回301永久重定向,用户访问旧链接会自动跳转到有效地址,也不影响搜索引擎收录。
Nginx服务器
要是用Nginx,找到站点配置文件(一般在/etc/nginx/sites-available/目录下),在server块里加这段规则:
rewrite ^(.*)%20(.*)$ $1_$2 permanent;
加完重启Nginx生效:sudo systemctl restart nginx
二、批量修改页面内的链接(彻底解决)
如果不想依赖重定向,直接把页面里的旧链接改成下划线版本,试试这两种批量方法:
方法1:Notepad++批量替换
- 打开Notepad++,选「文件」→「打开文件夹作为工作区」,选中网站根目录
- 按
Ctrl+Shift+F打开「在文件中查找」窗口 - 「查找目标」填:
href="([^"]*)%20([^"]*)" - 「替换为」填:
href="$1_$2" - 「查找模式」选「正则表达式」
- 勾选「在所有打开的文档中替换」,点「全部替换」就能批量改完所有页面里的链接。
方法2:Linux命令行批量替换
能登服务器的话,用sed命令批量处理:
# 先进入网站根目录 cd /path/to/your/website # 备份整个网站(先做这个,避免出错) cp -r . /path/to/website_backup # 批量替换当前目录下的.html文件 sed -i 's/href="\([^"]*\)%20\([^"]*\)"/href="\1_\2"/g' *.html # 处理所有子文件夹里的.html文件 find . -name "*.html" -exec sed -i 's/href="\([^"]*\)%20\([^"]*\)"/href="\1_\2"/g' {} \;
内容的提问来源于stack exchange,提问作者chainmatrix
相关产品推荐
相关产品推荐

