2011-02-10 108 views
0

总之,我试图改变给定的URL:mod_rewrite的替代查询字符串键

http://mydomain.com/category/title/attachment/randomstring_?resolution=320x480 

随着

http://mydomain.com/category/title/attachment/randomstring_320x480 

在本质上,从查询字符串中删除?resolution=和增加价值路径。

类别,标题和randomstring值是动态的,但它们的位置应始终相同。

我不知道它是否重要,但这是在WordPress中使用。

我尝试以下,但我只是得到一个404:

<IfModule mod_rewrite.c> 
RewriteEngine On 
RewriteBase/

RewriteCond %{QUERY_STRING} ^resolution=([0-9]{3,4}x[0-9]{3,4})$ 
RewriteRule ^$ ${REQUEST_URI}%1/? [R] 

RewriteRule ^index\.php$ - [L] 
RewriteCond %{REQUEST_FILENAME} !-f 
RewriteCond %{REQUEST_FILENAME} !-d 
RewriteRule . /index.php [L] 
</IfModule> 

任何帮助表示赞赏;)

回答

1

好,大量的试验和错误(和阅读RewriteLog输出后),我终于得到了它的工作如下:

<IfModule mod_rewrite.c> 
RewriteEngine On 
RewriteBase/
RewriteRule ^index\.php$ - [L] 

RewriteCond %{QUERY_STRING} ^resolution=(.*)$ 
RewriteRule . %{REQUEST_URI}%1? [R=301,L] 

RewriteCond %{REQUEST_FILENAME} !-f 
RewriteCond %{REQUEST_FILENAME} !-d 
RewriteRule . /index.php [L] 
</IfModule> 

与原来的解决方案的关键问题:

  • RewriteRule
  • RewriteRule
  • 使用^$代替.使用/?,而不是仅仅?不包括在RewriteRule标志,L

对于任何人谁是好奇,包括?RewriteRule防止QUERY_STRING保留在请求中。