由于不值得在这里讨论的原因,Google 一直在为我的一个网站建立索引,其中 URL 中包含不必要的查询字符串。我想将我的 htaccess 文件修改为 301 将所有这些请求重定向到 URL,而无需查询字符串中不需要的部分,但保留查询字符串的任何其他部分,这些部分可能(或可能不是)作为地址的一部分确保保留其他功能。
例如,以下网址
http://example.com/product.php?query=12345
http://example.com/index.php?section=ABC123&query=56789
http://example.com/search.php?query=987654&term=keyword
Run Code Online (Sandbox Code Playgroud)
会成为
http://example.com/product.php
http://example.com/index.php?section=ABC123
http://example.com/search.php?term=keyword
Run Code Online (Sandbox Code Playgroud)
有效地剥离 'query=XXXXX' 加上 ? 或 &,但确保删除后保留其他查询并使用正确的语法(即,仅从第三个示例中删除 ?query=98765 是行不通的,因为它会将链接保留为 search.php&term=keyword 而不是 search .php?term=关键字)。
正在查看其他一些堆栈答案,发现了这个:
RewriteBase /
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteCond %{QUERY_STRING} (.*)?&?query=[^&]+&?(.*)? [NC]
RewriteCond %{REQUEST_URI} /(.*)
RewriteRule .* %3?%1%2? [R=301,L]
Run Code Online (Sandbox Code Playgroud)
但这似乎不起作用,而且我对 htaccess 和正则表达式的了解还不足以找出原因。
预先感谢您的任何指点。
试试这个(我用你的例子测试了它,它工作正常):
RewriteEngine on
RewriteCond %{QUERY_STRING} ^(.*)&?query=[^&]+&?(.*)$ [NC]
RewriteRule ^/?(.*)$ /$1?%1%2 [R=301,L,NE]
Run Code Online (Sandbox Code Playgroud)
另外,您应该添加一个条件以仅将此规则应用于现有文件(这取决于您)。
如果你想要的话:
RewriteEngine on
RewriteCond %{REQUEST_FILENAME} -f
RewriteCond %{QUERY_STRING} ^(.*)&?query=[^&]+&?(.*)$ [NC]
RewriteRule ^/?(.*)$ /$1?%1%2 [R=301,L,NE]
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
6350 次 |
| 最近记录: |