.htaccess довольно проблема URL (mod_rewrite) - PullRequest
0 голосов
/ 29 июня 2010

У меня есть каталог, в котором перечислены товары по категориям.если переменная _GET существует, она используется в запросе.Я хотел бы использовать "красивые URL", например: example/a/1/b/2/c/3/d/4 становится example/index.html?a=1&b=2&c=3&d=4

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

Options +FollowSymlinks
RewriteEngine on
RewriteRule ([^/]+)/([^/]+)/([^/]+)/([^/]+)/([^/]+)/([^/]+)$ index.html?$1=$2&$3=$4&$5=$6 [L]
RewriteRule ([^/]+)/([^/]+)/([^/]+)/([^/]+)$ index.html?$1=$2&$3=$4 [L]
RewriteRule ([^/]+)/([^/]+)$ index.html?$1=$2 [L]

И это работает ... Однако, когда я добавляю длиннее и длиннее RewriteRules (например, в &17=$18), оно перестает работать.Последние переменные в цепочке превращаются в некий массив, основанный на более ранних значениях (в приведенном выше примере он будет содержать index.html?a0=a1&a3=a4) ...

  • Есть ли лучший способ сделать это?
  • Кажется неэффективным?
  • Существует ли ограничение на число переменных в .htaccess
  • Как долго может быть правило?

Спасибо!

Ответы [ 2 ]

1 голос
/ 29 июня 2010

mod_rewrite позволяет вам иметь только десять обратных ссылок, одна из которых является целой подходящей частью (которая в итоге оставляет вам только девять определяемых групп захвата), так что вы определенно ограничены этим.

Однако, для меня было бы гораздо разумнее изучить переменную REQUEST_URI / SCRIPT_NAME / PATH_INFO сервера в файле сценария и проанализировать ее, чтобы получить пары ключ-значение из URL.Тогда у вас просто будет это в вашем .htaccess:

RewriteRule On
RewriteCond %{REQUEST_FILENAME} !-d
RewriteCond %{REQUEST_FILENAME} !-f
RewriteRule . index.html [L]

И тогда ваш сценарий позаботится обо всем остальном.Мне, правда, интересно, если у вас есть , что много GET переменных, действительно ли это более читабельно, если все они превращены в "симпатичный" URL?В конце концов, если у вас есть двадцать косых черт в URL, вы можете быть в равной степени хорошими, просто передав обычную строку запроса в этот момент.Хотя это зависит от вашего приложения и от того, как пользователи взаимодействуют с этими URL-адресами, поэтому у вас может быть веская причина для того, чтобы сделать это таким образом.

1 голос
/ 29 июня 2010

mod_rewrite поддерживает только до $9 и %9.

Я рекомендую либо изменить скрипт для использования $_SERVER['PATH_INFO'], либо использовать RewriteMap для вызова скрипта для преобразования пути в строку запроса.

...