htaccess重写规则从URL中删除参数

时间:2013-11-08 18:38:10

标签: php regex apache .htaccess mod-rewrite

用户在浏览器中键入以下内容,这仍然是浏览器中的URL: xyz.com/info/productname /

内部会变成: xyz.com/info/index.php?product=productname

以下内容:

RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteCond %{HTTP_HOST} ^(www\.)?xyz\.com$ [NC]
RewriteRule ^info/([^/]+)/?$ /info/index.php?product=$1 [L,NC,QSA]

非常接近。不幸的是,问题似乎是使用xyz.com/info/productname /

时相对文件链接不起作用

看到之间的区别:

http://xyz.com/info/swooshhttp://xyz.com/info/swoosh/

第二个不起作用,因为相对链接已被破坏。

1 个答案:

答案 0 :(得分:1)

  • 从正则表达式中删除前导斜杠
  • 取出R = 302
  • 添加QSA
  • 确保请求不适用于file.directory

修改后的规则:

# fix relative links of css, js, images
RewriteRule ^info/(.+?\.(?:jpe?g|gif|bmp|png|tiff|css|js))$ /$1 [L,NC,R=302]

RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteCond %{HTTP_HOST} ^(www\.)?xyz\.com$ [NC]
RewriteRule ^info/([^/.]+)/?$ /info/index.php?product=$1 [L,NC,QSA]