Назад | Перейти на главную страницу

Переписать мод, чтобы получить ID из URL

У меня следующая реальная структура URL

/folder/folder2/file1.php
/folder/folder3/file2.php

где file1 и file2 может быть любой файл PHP.

у меня тоже есть

/folder/folder2/folder4/file1.php
/folder/folder3/folder4/file2.php

Я хочу изменить URL-адреса, чтобы они содержали такой идентификатор:

/folder/12345/folder2/file1.php

Что я пытаюсь сделать, так это создать правило mod_rewrite, которое получает идентификатор и запускает любой URL-адрес без части идентификатора

так

/folder/12345/folder2/file1.php

будет бежать

/folder/folder2/file1.php?id=12345

Как для этого должно выглядеть правило mod_rewrite?

Кроме того, что происходит, когда я отправляю формы как POST или GET? Может ли мод rewrite работать как с постом, так и с получением?

Я предполагаю, из вашего вопроса, что вы хотите только переписать URL-адреса формы:

  • /folder/<id>/folder2/<anyfile.php>
  • /folder/<id>/folder3/<anyfile.php>

где folder, folder2 и folder3 известны подкаталоги. Но .php файл может быть чем угодно.

(Это исключает /folder/folder2/folder4/file1.php и /folder/folder3/folder4/file2.php и т.д.)

В <id> также предполагается, что это только цифры (как в вашем примере). Если есть другие ограничения, например, всегда длина 5 цифр, то это также следует включить.

Используя mod_rewrite, вы бы сделали что-то вроде следующего:

RewriteEngine On

RewriteRule ^/?(folder)/(\d+)/(folder2|folder3)/([^./]+\.php)$ /$1/$3/$4?id=$2 [QSA,L]

$n являются обратными ссылками на заключенные в скобки подшаблоны в RewriteRule шаблон.

В QSA flag добавит строку запроса из запроса (если есть) - требуется, если вы отправляете форму через GET на один из этих URL-адресов.

Кроме того, что происходит, когда я отправляю формы как POST или GET? Может ли мод rewrite работать как с постом, так и с получением?

Запросы GET и POST будут переписаны.