如何将带参数页面URL重定向到无参数URL?301重定向失败求助
解决URL重定向问题
首先明确:.htaccess是Apache服务器的配置文件,不能直接写PHP代码,这是你之前尝试失败的核心原因。下面提供两种可行的解决办法:
方案一:用.htaccess实现301永久重定向
在你的.htaccess文件中添加以下规则,专门针对foobar.php移除emulatemode=2参数:
RewriteEngine On RewriteCond %{QUERY_STRING} ^emulatemode=2$ RewriteRule ^foobar.php$ /foobar.php? [R=301,L]
规则说明:
RewriteEngine On:开启URL重写功能RewriteCond:匹配查询字符串正好是emulatemode=2的请求RewriteRule:将请求重定向到不带查询参数的foobar.php,末尾的?会清空原有查询字符串R=301:标记为永久重定向,利于搜索引擎收录L:表示这是最后一条规则,停止后续规则匹配
如果之前的301规则没生效,可能是以下原因:
- 服务器未开启
mod_rewrite模块,需联系主机商开启或在Apache配置中自行启用 - .htaccess所在目录的Apache配置未设置
AllowOverride All权限,导致规则无法生效 - 浏览器缓存了旧的重定向记录,清除缓存后再测试即可
方案二:在foobar.php中用PHP代码实现重定向
若想用PHP处理,不要把代码放在.htaccess里,直接修改foobar.php文件,在文件最开头(任何输出之前)添加以下代码:
<?php if (isset($_GET['emulatemode']) && $_GET['emulatemode'] === '2') { header("Location: https://www.example.com/foobar.php", true, 301); exit; } ?>
注意:必须保证这段代码在任何HTML内容、echo输出之前执行,否则会触发"headers already sent"错误。
内容的提问来源于stack exchange,提问作者Sudhanshu Singh
相关产品推荐
相关产品推荐

