Вопрос:
Я не могу удалить один параметр GET, неправильно добавленный одним модулем 404 SEF.
Я хочу удалить “task = view” только в том случае, если он появляется один, а не с другим параметром.
Так
www.mysite.com/1.html?task=view следует перенаправить на сайт www.mysite.com/1.html.
В то время как www.mysite.com?task=view&view=article должен оставаться неизменным.
Независимо от того, какой RewriteRule я использую, этот параметр не подходит. Похоже, что он генерируется из любой переменной среды при запуске index.php.
Например, это не работает:
RewriteCond %{QUERY_STRING} ^task=view$ [NC] RewriteRule (.*)task=view.* $1 [R=301,L]
Вот мой.htaccess файл:
Options +FollowSymLinks RewriteEngine On RewriteCond %{QUERY_STRING} mosConfig_[a-zA-Z_]{1,21}(=|%3D) [OR] RewriteCond %{QUERY_STRING} base64_encode.*(.*) [OR] RewriteCond %{QUERY_STRING} (<|%3C).*script.*(>|%3E) [NC,OR] RewriteCond %{QUERY_STRING} GLOBALS(=|[|%[0-9A-Z]{0,2}) [OR] RewriteCond %{QUERY_STRING} _REQUEST(=|[|%[0-9A-Z]{0,2}) RewriteRule ^(.*)$ index.php [F,L] RewriteBase / RewriteCond %{REQUEST_FILENAME} !-f RewriteCond %{REQUEST_FILENAME} !-d RewriteCond %{REQUEST_URI} !^/index.php RewriteCond %{REQUEST_URI} (/|.php|.html|.htm|.feed|.pdf|.raw|/[^.]*)$ [NC] RewriteRule (.*) index.php RewriteRule .* — [E=HTTP_AUTHORIZATION:%{HTTP:Authorization},L] Options -Indexes
Каков способ справиться с этим?
Лучший ответ:
Используйте это правило:
RewriteCond %{QUERY_STRING} ^task=view$ [NC] RewriteRule ^(.*)$ $1? [R=301,L]
? в конце $1 будет снята любая существующая строка запроса.