使用301重定向htaccess从URL中删除一些字符?

时间:2014-08-01 06:25:59

标签: php apache .htaccess mod-rewrite redirect

我想删除一些字符?m=1&我的网址末尾有?m=0。出于这个目的,我使用了博客文章How To Forcefully Redirect Blogger Mobile Template To Desktop Template?中的JavaScript,并使用我想要的编辑它,直到一个以下,并且工作正常。

<script type='text/javascript'>
var curl = window.location.href;if (curl.indexOf('m=1') != -1) {curl = curl.replace('m=1', '');window.location.href = curl;}
var curl = window.location.href;if (curl.indexOf('m=0') != -1) {curl = curl.replace('m=0', '');window.location.href = curl;}
</script>

删除我想要的额外字符,然后重定向到新网址,但根据Google,它不是SE友好的,我必须通过301 Redirect使用.htaccess来告诉每个搜索引擎这个网址现在改变了。

我的网址显示为http://www.blog.com/2014/08/post-title.html?m=1&amp; http://www.blog.com/2014/08/post-title.html?m=0现在......我可以使用.htaccess301 Redirect执行相同操作吗?

4 个答案:

答案 0 :(得分:1)

如果您的整个网站上只有此查询字符串,您可以尝试:

RewriteEngine    On
RewriteCond      %{QUERY_STRING}    ^m=1$  [OR]
RewriteCond      %{QUERY_STRING}    ^m=0$
RewriteRule      (.*)               $1?     [R=301]

答案 1 :(得分:1)

您可以使用mod_rewrite执行此操作。您可以在%{QUERY_STRING}的条件中检查查询字符串,并使用[R=301]标志使其成为永久重定向。 QSD标志将丢弃查询字符串。

在Apache 2.4及更高版本中,您可以使用以下内容:

RewriteCond %{QUERY_STRING} m=[01]
RewriteRule ^ http://%{HTTP_HOST}%{REQUEST_URI} [QSD,R,L]

在Apache的较低版本中,QSD标志不存在。您必须使用一种技巧来覆盖查询字符串,方法是将空查询字符串附加到重写目标。

RewriteCond %{QUERY_STRING} m=[01]
RewriteRule ^ http://%{HTTP_HOST}%{REQUEST_URI}? [R,L]

当规则按预期工作时,将R更改为R=301。请注意,您应该将此放在之前的任何其他规则中。最有可能的是一个包罗万象的规则,最终将请求发送到您的博客后端,并且您必须在此之前重定向。

答案 2 :(得分:0)

我在这里得到了另一个解决方案,如果上层不适合您,请在.htaccess文件顶部添加以下代码来尝试此操作...

RewriteEngine On
RewriteCond %{QUERY_STRING} ^m=1$
RewriteRule ^(.*)$ /$1? [R=301,L]
RewriteCond %{QUERY_STRING} ^m=0$
RewriteRule ^(.*)$ /$0? [R=301,L]

以上代码仅在您的网址与http://www.example.com?m=1相似时有效,但在http://www.example.com?m=1&foo=bar时则无效。

答案 3 :(得分:0)

你可以使用简单的java脚本重定向用户这个脚本应该放在所有css和js之上,因为一旦用户访问它就必须加载

<script>
if (screen.width <= 800) {
     document.location = "http://mobileversionofyourwebsite .com/";
  }
</script>

来源:auto liker sayoutlouder