我们在.htacces
中遇到了网址重写和重定向301目前我们的Internetsite只有一个文件(index.php)作为变量传递给类别ID,然后显示该类别的内容。
例如: 使用链接www.oursite.com/index.php?CATID=4调用类别Nr 4,其中显示“map-france”类别的内容 使用链接www.oursite.com/index.php?CATID=5调用类别Nr 5,该链接显示“map-italy”类别的内容
总共我们有800个类别。
我们想重写网址,以便显示类别名称: 例如: www.oursite.com/map-france而不是www.oursite.com/index.php?CATID=4 www.oursite.com/map-italy而不是www.oursite.com/index.php?CATID=5
目前最好的想法是使用.htacces
中的mod_rewrite函数到目前为止,我们通过以下代码实现了这一目标:
RewriteEngine On
RewriteRule ^map-france/?$ index.php?CATID=4 [NC,L]
RewriteRule ^map-italy/?$ index.php?CATID=5 [NC,L]
这很有效。
为了避免来自搜索引擎的双重索引,我们还应该将旧网址中的重定向301应用于新网址。 我们设法使用以下代码执行此操作:
RewriteCond %{QUERY_STRING} CATID=4
RewriteRule ^index\.php$ http://www.oursite.com/map-france/? [L,R=301]
RewriteCond %{QUERY_STRING} CATID=5
RewriteRule ^index\.php$ http://www.oursite.com/map-italy/? [L,R=301]
如果我们将所有内容放在一起它就不起作用,它似乎会产生一个永无止境的重定向循环
我们做错了什么?
非常感谢您的帮助:)
答案 0 :(得分:0)
尝试匹配请求而不是%{QUERY_STRING}
RewriteCond %{THE_REQUEST} \?CATID=4
RewriteRule ^index\.php$ http://www.oursite.com/map-france/? [L,R=301]
RewriteCond %{THE_REQUEST} \?CATID=5
RewriteRule ^index\.php$ http://www.oursite.com/map-italy/? [L,R=301]
重写引擎循环,直到URI停止更改,这意味着您的第一个规则添加了查询字符串,第二个规则匹配查询字符串并重定向到没有查询字符串。然后浏览器再次发出相同的请求,并应用您的第一个规则,然后第二个规则与查询字符串匹配,并重新定向浏览器再次等。