Попробуйте следующее, дайте мне знать, если это работает:
RewriteEngine on
RewriteBase /
# Allow files that exist to bypass rewrites
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
# Rewrite remaining files
RewriteRule ^/([-a-zA-Z0-9_]+)/([-a-zA-Z0-9_]+\.php)$ /$2?newparam=$1 [L,QSA]
Это позволяет только dir
и file.php
, содержащие буквенно-цифровые символы, подчеркивание и тире.
Последнее правило ищет URI, совпадающий с двумя компонентами пути между косыми чертами. Первый должен быть 1 или более символов в данном наборе [-a-zA-Z0-9_]+
, второй должен быть таким же, но оканчиваться на .php
. Символы ^
и $
соответствуют передней и задней части URI. Замена говорит, что поместите вторую группу в скобках (часть file.php
) впереди и поместите первую группу в скобках (часть dir
) в качестве параметра с именем newparam
. [L,QSA]
в конце говорит, что это правило Last [L]
, если оно соответствует, поэтому прекратите сопоставление дальше и выполните перенаправление, а [QSA]
означает «Query String Append», который добавляет исходную строку запроса в конец Опять же, отключение этого параметра приведет к удалению исходной строки запроса.