在我正在处理的网站上,我需要设置一个消除查询字符串的重定向,但需要为某些参数设置例外,例如“ver”,“dir”,“load”等。
例如
www.myweb.com/?ver=3.5&load=min&dir=ltr
这没关系。
www.myweb.com/?id=123
这会重定向到www.myweb.com。
我有以下代码重定向除js和css
之外的每个查询字符串 RewriteEngine on
# redirect to same URI, but without query string
RewriteCond %{QUERY_STRING} .
RewriteRule ^ %{REQUEST_URI}? [R=301]
# except .js and .css
RewriteRule ^(.*)\.(?!js|css)([^.]*)$ $1\.php [L]
这消除了所有查询字符串,如何添加参数异常?
由于
答案 0 :(得分:0)
我认为除了通过htaccess和正则表达式的ver / load / dir的任何变体之外,有一种简单的方法可以删除所有查询字符串参数。
如果你有类似的话:
www.myweb.com/?q=q&a=a&的版本= 3.5 强>&安培; Z = Z&安培; W =瓦特&安培;的负载=分钟强>&安培; X = X&安培;的 DIR = LTR 强>&安培; C = C&安培; d = d
很难提取出任意数量的ver / load / dir参数:
www.myweb.com/?ver=3.5&load=min&dir=ltr
你最好做这样的事情:
# remove all params if no ver/dir/load
RewriteCond %{QUERY_STRING} !^$
RewriteCond %{QUERY_STRING} !(ver|dir|load)=[^&]+
RewriteRule ^(.*)$ /$1? [L,R=301]
# query string isn't only ver/dir/load params, cleanse them with a php script:
RewriteCond %{QUERY_STRING} !^(&?(ver|dir|load)=[^&]+)+$
RewriteCond %{REQUEST_URI} !qs-clean\.php
RewriteRule ^(.*)$ /qs-clean.php?page=$1 [L,QSA]
然后在qs-clean.php
脚本中,你会有类似的东西:
<?php
$qs="";
if(isset($_GET['load']))
$qs=$qs . '&load=' . $_GET['load'];
if(isset($_GET['ver']))
$qs=$qs . '&ver=' . $_GET['ver'];
if(isset($_GET['dir']))
$qs=$qs . '&dir=' . $_GET['dir'];
header("HTTP/1.1 301 Moved");
header('Location: /' . $_GET['page'] . '?' . substr($qs,1));
?>
所以它会进行重定向,只打印出你关心的参数。
如果在查询字符串中出现ver / dir / load参数曾,则只是不删除查询字符串,可以使用mod_rewrite完成。这是在另一种情况下正在进行的重定向:
# remove all params if no ver/dir/load
RewriteCond %{QUERY_STRING} !^$
RewriteCond %{QUERY_STRING} !(ver|dir|load)=[^&]+
RewriteRule ^(.*)$ /$1? [L,R=301]