mod-rewrite从URL末尾删除跟踪代码

时间:2015-04-25 15:55:58

标签: apache .htaccess mod-rewrite

如何编写mod-rewrite以在图片网址后删除旧的跟踪代码。我想发送

的请求
 www.myurl.com/blah/image.jpg%12345

 www.myurl.com/blah/image.jpg

%12345跟踪代码始终相同。

1 个答案:

答案 0 :(得分:1)

  

%12345跟踪代码始终相同。

在该字符串的开头,%12被urlencoded为不可打印的字符,但mod_rewrite将其视为_。因此,您必须检查REQUEST_URI _345并将其删除。

  

%3F345用于网址。

如果跟踪代码为%3F345,则%3F被urlencoded为?,应该被检测为查询字符串。但是,mod_rewrite似乎并没有抓住这一点,因此我对您的案例使用了两项检查 - 一项针对?,另一项针对%3F。如果?已编码,则此方法有效:

RewriteEngine On 
RewriteCond %{QUERY_STRING} ^345 [OR]
RewriteCond %{THE_REQUEST} \%3F345 [NC]
RewriteRule ^(.*)$ %{REQUEST_URI}? [R=301,L]

输入:

  

http://www.myurl.com/blah/image.jpg?345
  http://www.myurl.com/blah/image.jpg%3F345
  http://www.myurl.com/blah/image.jpg%3F345&param=value

重写:

  

http://www.myurl.com/blah/image.jpg

注意:无法对其进行实验here,因为不支持%{THE_REQUEST}。我在我的一个实时服务器上测试了这个以验证它是否有效。