删除重写时生成的额外字符

时间:2009-07-11 23:48:32

标签: .htaccess mod-rewrite

我从Gumbo用勺子喂这个htaccess文件,我很感激,因为我学到了很多东西。但是,我做了一些修改并且来回还是设法再次进行了一些小改动,它工作了80%但是有一些情况它不起作用:

如果我输入 http://www.example.com/view.php?t=45re ,它会成功重写,但会在网址http://www.example.com/中执行此操作**?t = ** 45我看不出那是怎么回事发生。再也非常感谢了。

# REWRITE DEFAULTS
RewriteEngine On
RewriteBase /

# /view.php?t=h5k6 externally to /h5k6
RewriteCond %{THE_REQUEST} ^GET\ /view\.php
RewriteCond %{QUERY_STRING} ^([^&]*&)*t=([^&]+)&?.*$
RewriteRule ^view\.php$ / [L,R=301]

# /h5k6 internally to /view.php?t=h5k6
RewriteRule ^([0-9a-z]+)$ view.php?t=$1 [L]

2 个答案:

答案 0 :(得分:1)

不知道你的情况,也不知道Gumbo告诉你的是什么,从你的问题中我可以收集到什么(即你希望在外部重定向时不传递查询字符串),你可以

RewriteRule ^view\.php$ /? [L,R=301]

请注意额外的?或

RewriteRule ^view\.php$ / [L] 

删除外部重定向并使用内部重定向。

答案 1 :(得分:1)

我认为你的意思是this post。而且我不得不承认,我忘记了替换中的空查询以覆盖它,就像Vinko已经提到的那样。

所以试试这个:

# /view.php?t=h5k6 externally to /h5k6
RewriteCond %{THE_REQUEST} ^GET\ /view\.php
RewriteCond %{QUERY_STRING} ^([^&]*&)*t=([^&]+)&?.*$
RewriteRule ^view\.php$ /%2? [L,R=301]

# /h5k6 internally to /view.php?t=h5k6
RewriteRule ^([0-9a-z]+)$ view.php?t=$1 [L]

%2是对相应RewriteCond指令模式的第二个分组匹配的反向引用。因此,在这种情况下,%2会在([^&]+)中保持^([^&]*&)*t=([^&]+)&?.*$的匹配。