Вариант 1: (site.com/index.php?var1=A&var2=B&varN=n
):
Options +FollowSymLinks -MultiViews
RewriteEngine On
# do not do anything for already existing files
RewriteCond %{REQUEST_FILENAME} -f [OR]
RewriteCond %{REQUEST_FILENAME} -d
RewriteRule .+ - [L]
RewriteRule ^([^/]+)/?$ index.php?p1=$1 [QSA,L]
RewriteRule ^([^/]+)/([^/]+)/?$ index.php?p1=$1&p2=$2 [QSA,L]
RewriteRule ^([^/]+)/([^/]+)/([^/]+)/?$ index.php?p1=$1&p2=$2&p3=$3 [QSA,L]
RewriteRule ^([^/]+)/([^/]+)/([^/]+)/([^/]+)/?$ index.php?p1=$1&p2=$2&p3=$3&p4=$4 [QSA,L]
1. У вас был [NC]
флаг ... поэтому вам не нужно было A-Z
в вашем паттерне.
2. Вместо [a-zA-Z0-9_-\+\=\&]
или [a-zA-Z0-9_-]
я использую [^/]
, что означает любой символ, кроме косой черты /.
3. [QSA]
Флаг был добавлен для сохранения существующей строки запроса.
Вариант 2: (site.com/index.php/A/B/n/
):
Options +FollowSymLinks -MultiViews
RewriteEngine On
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule (.*) index.php/$1 [L]
В действительности, если вы не планируете показывать этот URL где-либо (например, перенаправление 301 и т. Д.), Последнюю строку можно легко заменить на RewriteRule .* index.php [L]
- вы будете искать исходный URL, используя $_SERVER['REQUEST_URI']
в своем PHP код в любом случае.