1

您好,我一直在网上搜索此问题的答案,但找不到。我正在寻找使用 htaccess 从 url 中删除特定参数。

例如,我有以下网址:

www.mysite.com/product.php?product_id=123&session=sdfs98d7fs9f8d7
www.mysite.com/anotherurl.php?session=12312341341&someotherparam=123

我需要他们 301 重定向到:

www.mysite.com/product.php?product_id=123
www.mysite.com/anotherurl.php?someotherparam=123

请注意,上面的网址只是示例。无论有多少参数是 url 的一部分或会话位于何处,我都需要从任何和所有 url 中删除会话参数。

我想我需要一种方法来获取直到 session=blah 的 url 字符串和 session=blah 之后的 url 字符串,然后将这两个部分结合起来并重定向到新的 url。

非常感谢任何帮助,谢谢。

4

3 回答 3

1

我在另一个网站上找到了解决方案

# case: leading and trailing parameters
RewriteCond %{QUERY_STRING} ^(.+)&session=[0-9a-z]+&(.+)$ [NC]
RewriteRule (.*) /$1?%1&%2 [R=301,L]

# case: leading-only, trailing-only or no additional parameters
RewriteCond %{QUERY_STRING} ^(.+)&session=[0-9a-z]+$|^osCsid=[0-9a-z]+&?(.*)$ [NC]
RewriteRule (.*) /$1?%1 [R=301,L]
于 2013-02-05T19:19:24.917 回答
1

更新

简而言之,您想要的只是从查询中删除键值对session=xx

这是一个选项:

RewriteEngine On
RewriteBase /
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteCond %{QUERY_STRING}  (.*)?&?session=[^&]+&?(.*)?  [NC]
RewriteCond %{REQUEST_URI} /(.*)
RewriteRule .*  %3?%1%2? [R=301,L]
于 2013-01-09T22:07:15.347 回答
0

未经测试,但应该可以工作:

RewriteCond %{QUERY_STRING} product_id=([0-9]+)
RewriteRule .* product.php?product_id=%1
于 2013-01-09T22:11:11.117 回答