.htaccess любой длины - PullRequest
       11

.htaccess любой длины

0 голосов
/ 27 января 2009

Какими будут действительные правила .htaccess для выполнения чего-то подобного

/mypage/ --> /index.php?page=mypage
/mypage/param1/value1/ -->index.php?page=mypage&params=param1/value1

С потенциально неограниченным количеством параметров?

Спасибо.

Ответы [ 4 ]

4 голосов
/ 27 января 2009

Лучше всего передать всю часть после / mypage / в качестве параметра в скрипт php и сделать так, чтобы он расшифровывался:

RewriteRule ^mypage/(.*) index.php?page=mypage&params=$1 [L,NC,QSA]

Также, если вы хотите, чтобы страница была динамической:

RewriteRule ^([^/\.]+)/(.*) index.php?page=$1&params=$2 [L,NC,QSA]

или

RewriteRule ^([^/\.]+)(/(.*))? index.php?page=$1&params=$3 [L,QSA]

EDIT
Добавлено предложение Cal, спасибо Cal.

Редактировать
Если я правильно понимаю ваш комментарий: (если нет, пожалуйста, объясните). Вы можете просто использовать оператор switch с действием по умолчанию, которое совпадает с действием index для переменной страницы:

switch($_GET['page']){
 case 'mypage':
  doMyPageStuff();
 break;
 case 'foo':
  doFooStuff();
 break;
 case 'index':
 default:
  doIndexStuff();
 break;
}
1 голос
/ 28 января 2009

Вот мое предложение:

RewriteRule ^([^/]+)/(([^/]+/[^/]+(/[^/]+/[^/]+)*)/)?$ /index.php?page=$1&params=$3 [L]

Это не очень хорошо, но точно, как вы просили. Это позволяет только пути в форме:

/mypage/
/mypage/param1/value1/
/mypage/param1/value1/param2/value2/
/mypage/param1/value1/param2/value2/param3/value3/
/mypage/param1/value1/param2/value2/param3/value3/param4/value4/
…
1 голос
/ 27 января 2009
RewriteRule ^([^/]+)/(.+)/?$    index.php?page=$1&params=$2

Или очень похоже - нет сервера для проверки!

0 голосов
/ 28 января 2009

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

RewriteCond %{QUERY_STRING} ^(.*)$
RewriteRule ^(.*/)([^/]+)/([^/]+) $1?$2=$3&%1 [L]
RewriteCond %{QUERY_STRING} ^(.*)$
RewriteRule ^([^/]+)/ $1.php?%1 [L]

Это работает, потому что mod_rewrite ведет себя рекурсивно. То есть после каждой перезаписи новый URL обрабатывается снова. Каждый раз два значения в конце превращаются в параметры запроса и добавляются в строку запроса.

Это перепишет следующее

/mypage/param1/val1/param2/val2/param3/val3/...     --->
/mypage.php?param1=val1&param2=val2&param3=val3&...

Останавливается, когда остается только один параметр. Он возьмет первый «параметр» и вызовет файл .php с таким именем. Количество пар param / val не ограничено.

-
BMB

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...