Все запросы example.com/app/s={some string}
должны быть перенаправлены на example.com/s={some string}
У вас нет ?
в URL-адресах вашего примера, следовательно, строка запроса ,s=
- это просто часть URL-пути (это не строго параметр URL).(Это, однако, противоречит вашему примеру кода, где вы пытаетесь сопоставить ?
и строку запроса? Именно это я и пытался уточнить в комментариях.)
Если s={some string}
действительно частьURL-пути, затем попробуйте следующее:
RewriteEngine On
RewriteRule ^app/(s=.*) /$1 [R=302,L]
ОБНОВЛЕНИЕ: Я забыл ?
в примере выше
В этом случае ваше первое «обновление» должно сработать (в зависимости от того, куда вы поместили директивы).Однако было бы лучше написать это так:
RewriteCond %{QUERY_STRING} ^s=
RewriteRule ^app/$ / [R=302,L]
Более эффективно проверять URL-путь в шаблоне RewriteRule
, поскольку он обрабатывается первым.Строка запроса передается по умолчанию (нет необходимости capture {some string}
).
Тест с 302 (временными) перенаправлениями, чтобы избежать проблем с кэшированием.Измените на 301 (постоянный) - если это является намерением - только после того, как вы подтвердите, что он работает нормально.
Перед тестированием вам необходимо очистить кэш браузера.