Apache переписать: dir / file.php? Foo = bar & name = val -> file.php? Newparam = dir & foo = bar & name = val - PullRequest
0 голосов
/ 09 декабря 2010

Что такое код .htaccess для следующего перезаписи URL:

www.example.com/dir/file.php

в

www.example.com/file.php?newparam=dir

и

www.example.com/dir/file.php?param1=val1&param2=val2

в

www.example.com/file.php?newparam=dir&param=val1&param2=val2

Заранее спасибо.

1 Ответ

0 голосов
/ 09 декабря 2010

Попробуйте следующее, дайте мне знать, если это работает:

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», который добавляет исходную строку запроса в конец Опять же, отключение этого параметра приведет к удалению исходной строки запроса.

...