Я считаю, что это должно читаться как
RewriteRule ^product-([A-Za-z\-]+).php /sample.php?m=$1&%{QUERY_STRING}
Обратите внимание на обратную косую черту, выходящую из тире.Тире является оператором в соответствующей части, поэтому его необходимо экранировать.
Кроме того, чтобы включить переменные GET с переписанным URL-адресом без их перезаписи, добавьте идентификатор строки запроса в конец.
Это перезапишет:
www.example.com/product-widget.php?variable=12
до
www.example.com/sample.php?m=widget&variable=12
Это то, к чему, я полагаю, вы стремитесь.
С учетом вышесказанного я не уверен, что экранирование на самом деле работает, поскольку я только что обнаружил проблему с использованием тире в своих переписанных URL-адресах, которую я не могу решить.Как будто модуль переписывания Apache 1.3.33 не любит тире в строке перезаписи.В любом случае, так должно работать, и это работает на моем сервере.