Как вы знаете, тире вводит комментарий
как я могу сделать это действительным?
Options +FollowSymlinks RewriteEngine on RewriteRule ^(.+)\.php$ /#$1 [R=301,NC]
Вы не можете управлять данными после # по apache. Даже facebook обрабатывает перенаправление данных после # от javascript.
Если я ошибаюсь, пожалуйста, кто-нибудь исправит меня, несколько лет назад эта проблема сводила меня с ума.
Используйте флаг NE :
RewriteRule ^(.+)\.php$ /#$1 [R=301,NE]
Кстати: # - это только начало комментария , если используется в начале строки:
#
Строки, начинающиеся с хеш-символа "#", считаются комментариями и игнорируются. Комментарии не могут быть включены в строку после директивы конфигурации.
Замените # на \%23, и это должно сработать, или используйте флаг [NE]/noescape.
\%23
[NE]/noescape