如何通过.htaccess配置实现URL有无尾部斜杠均可正常访问
问题根因
你当前配置的重写规则仅精确匹配无尾部斜杠的路径contacts,带斜杠的路径contacts/没有对应的匹配规则,因此返回404错误。
修复配置
直接修改原规则中的正则匹配段,用/?兼容有无尾部斜杠两种情况即可:
RewriteEngine On Options -Indexes # 若站点放在子目录mysitedirectory下,可取消下一行注释避免路径偏移 # RewriteBase /mysitedirectory/ RewriteCond %{REQUEST_FILENAME} !-f RewriteCond %{REQUEST_FILENAME} !-d RewriteRule ^contacts/?$ contacts.php [L,QSA,NC] RewriteCond %{REQUEST_FILENAME} !-f RewriteCond %{REQUEST_FILENAME} !-d RewriteRule ^home/?$ index.php [L,QSA,NC]
规则说明
正则表达式中的/?表示匹配0个或1个斜杠,因此^contacts/?$可以同时命中contacts和contacts/两种请求路径,满足你两种格式都可访问的需求。
注意原配置中RewriteCond仅对紧跟在它后面的第一条RewriteRule生效,因此给home路径的规则也补充了相同的文件/目录判断条件,避免误拦截真实存在的文件请求。
可选优化(非必选)
如果需要避免搜索引擎判定两种路径为重复内容,可额外添加规则统一URL格式,例如将所有带尾部斜杠的非目录请求301跳转到不带斜杠的版本:
# 放在所有重写规则最前面即可 RewriteCond %{REQUEST_FILENAME} !-d RewriteRule ^(.*)/$ /$1 [L,R=301]
内容的提问来源于stack exchange,提问作者Jay Oduro
相关产品推荐
相关产品推荐

