Использование MOD_REWRITE для URL-переменных и удаление пустых параметров, когда они не используются - PullRequest
3 голосов
/ 25 апреля 2011

Я пытаюсь создать mod_rewrite, который при входе пользователя или отображении в URL:

www.example.com/var1/var2/var3/var4/

выводит то же самое, что и

www.example.com?page=var1&cat=var2&subcat=var3&subsubcat=var4

, но при наличииизменение числовых переменных, оно все равно будет работать, поэтому переменные могут быть:

www.example.com/var1/
or
www.example.com/var1/var2/
or
www.example.com/var1/var2/var3/
or
www.example.com/var1/var2/var3/var4/

Если я использую следующее, это работает только для www.example.com/var1/var2/var3/var4/ но не остальные:

Options +FollowSymLinks RewriteEngine On RewriteBase /

RewriteRule ^([^&]+)/([^&]*)/([^&]*)/([^&]*)/$ /?page=$1&cat=$2&subcat=$3&subsubcat=$4 [L]

Если я использую следующий код, используя CHAINING, он в некоторой степени работает как цепочка, но проблема в том, что для

www.example.com/var1/var2/
www.example.com/var1/var2/var3/
www.example.com/var1/var2/var3/var4/

он выводитVAR1 как «/», поэтому первая переменная игнорируется с использованием следующего кода:

Options +FollowSymLinks
RewriteEngine  On
RewriteBase /

RewriteRule ^([^&]+)/$ /?page=$1 [C]
RewriteRule ^([^&]+)/([^&]*)/$ /?page=$1&cat=$2 [C]
RewriteRule ^([^&]+)/([^&]*)/([^&]*)/$ /?page=$1&cat=$2&subcat=$3 [C]
RewriteRule ^([^&]+)/([^&]*)/([^&]*)/([^&]*)/$ /?page=$1&cat=$2&subcat=$3&subsubcat=$4 [L]

Порядок всегда одинаков, поэтому это должно быть легко.Как я могу сделать эту работу, пожалуйста?

1 Ответ

2 голосов
/ 25 апреля 2011

Возможно, я что-то упустил, но, по-моему, вам не нужен флаг C здесь.Пожалуйста, примите во внимание следующие правила:

RewriteEngine on
Options +FollowSymlinks -MultiViews

RewriteCond  %{QUERY_STRING} !^page= [NC]
RewriteRule ^([^/]+)/?$ /?page=$1 [L]

RewriteCond  %{QUERY_STRING} !^page= [NC]
RewriteRule ^([^/]+)/([^/]*)/?$ /?page=$1&cat=$2 [L]

RewriteCond  %{QUERY_STRING} !^page= [NC]
RewriteRule ^([^/]+)/([^/]*)/([^/]*)/?$ /?page=$1&cat=$2&subcat=$3 [L]

RewriteCond  %{QUERY_STRING} !^page= [NC]
RewriteRule ^([^/]+)/([^/]*)/([^/]*)/([^/]*)/?$ /?page=$1&cat=$2&subcat=$3&subsubcat=$4 [L]

Я добавил RewriteCond %{QUERY_STRING} !^page= [NC] во все правила, чтобы убедиться, что существует бесконечный цикл.Также я добавил опциональную косую черту, добавив ? в конце каждого правила.

Все вышеперечисленные правила работают нормально в моем тестировании.

...