Это работает :
RewriteCond %{REQUEST_URI} ^/changefile\.php$
RewriteCond %{QUERY_STRING} ^filename=([0-9a-z_-]+)$
RewriteRule ^(.*)$ http://website.com/%1.php? [R=301,L]
Объяснение
%1
взято из: RewriteCond% {QUERY_STRING} ^ filename = ([0-9a-z _-] +) $
Наличие ?
в RewriteRule останавливает добавление исходной строки запроса к перенаправлению
Если вызываемый файл - changefile.php, и у него есть строка запроса с именем файла = внутри, затем перенаправьте, используя %1
в качестве страницы для перехода.
Если вы используете RewriteBase, вам нужно будет добавить это тоже:
Например:
RewriteBase /test/
RewriteCond %{REQUEST_URI} ^/test/changefile\.php$
Это не работает:
RewriteRule ^changefile.php?filename=([a-z0-9-]+)$ http://test.com/$1.php? [R=301,L]
Это связано с тем, что вы не можете проверить строку запроса с помощью RewriteRule
или RedirectMatch