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

Как я могу использовать Apache RewriteRules + PHP, чтобы определить, какую страницу показывать?

Я пытаюсь создать масштабируемое RewriteRule для своего .htaccess, я использую каждое слово перед косой чертой в качестве параметра.

например: http://localhost/mysite/param1/param2/param3/.../param20

Я работаю с этим кодом (но если мне нужно 6-7 параметров, это будет слишком долго):

Options +FollowSymLinks
RewriteEngine   on

DirectoryIndex  web.php?param1=inicio

RewriteRule ^([a-zA-Z0-9_-]+)$                      web.php?param1=$1
RewriteRule ^([a-zA-Z0-9_-]+)/([a-zA-Z0-9_-]+)$     web.php?param1=$1&param2=$2

Следующая rewriteRules будет длиннее ^([a-zA-Z0-9_-]+)/([a-zA-Z0-9_-]+)$/([a-zA-Z0-9_-]+)$/([a-zA-Z0-9_-]+)$/([a-zA-Z0-9_-]+)$ web.php?param1=$1&param2=$2&param3=$3&param4=$4&param5=$5

Я отправляю каждый параметр в php как отдельную переменную и использую первый параметр, чтобы решить, какая страница должна отображаться в web.php. Есть ли способ сократить его? Я не знаю, как его оптимизировать. Я даже не знаю, на правильном ли я пути. Как бы вы это сделали? Может быть, используя php? Спасибо.

Вы не должны выполнять синтаксический анализ параметров в RewriteRule, за исключением случаев, когда у вас есть небольшое фиксированное количество параметров (например, MediaWiki делает).

Вместо этого перенаправляйте каждый запрос (или их подмножество, основанное, например, на первые символы URL-адреса) на PHP-скрипт, который будет выполнять синтаксический анализ самого URL-адреса. Затем он будет отображать правильную страницу в зависимости от того, что он проанализировал.