Mod_rewrite плоские ссылки - PullRequest
       10

Mod_rewrite плоские ссылки

0 голосов
/ 14 апреля 2011

Я пытаюсь отобразить мои переменные get в виде плоских ссылок. Хотите изменить это:

http://mydomain.com/index.php?page=shop&var1=hat&var2=10

до

http://mydomain.com/index.php/shop/hat/10

Пожалуйста, имейте в виду, что не существует фиксированного количества переменных, поэтому я использую var1, var2, ... и т. Д.

[править] У меня уже есть частично работающий скрипт, но он работает только с макс. 3 переменными

RewriteCond %{ENV:REDIRECT_STATUS} 200
RewriteRule .* - [L]
RewriteRule ^([^/\.]+)/?$ index.php?page=$1 [L]
RewriteRule ^([^/\.]+)/?([^/\.]+)/?$ index.php?page=$1&var=$2 [L]
RewriteRule ^([^/\.]+)/?([^/\.]+)/?([^/\.]+)/?$ index.php?page=$1&var=$2&var2=$3 [L]
RewriteRule ^([^/\.]+)/?([^/\.]+)/?([^/\.]+)/?$ index.php?page=$1&var=$2&var2=$3&var3=$4 [L]

Ответы [ 2 ]

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

Итак, сначала запомните, что mod_rewrite работает так:

http://mydomain.com/index.php/shop/hat/10

(тип клиента) переписывается на

http://mydomain.com/index.php?page=shop&var1=hat&var2=10

(что обслуживается клиентом), но не обязательно отображается как последний. (Если вы не сделаете это перенаправление)

Итак, если ваш формат полностью описан здесь:

RewriteRule ^index\.php/([^/]+)/([^/]+)/([0-9]+)$ /index.php?page=$1&var2=$2&var2=$3

Должно быть хорошо.

EDIT:

О, кстати! Я не принял во внимание переменную номер переменной. Это не должно быть обработано mod_rewrite, я думаю. Возможно, лучший выстрел - RewriteRule index.php/(.*) /index.php?call=$1, а затем использовать ваш сценарий для взрыва, используя / delimiter.

Вы можете сделать это, только если вы уже знаете номер переменной AFAIK.

0 голосов
/ 14 апреля 2011

Вы можете просто направить все запросы напрямую в index.php (называемый начальной загрузкой) и позволить сценарию проанализировать переменные.

Вот как это делается с Zend Framework , выследует взглянуть на это.У ZF также есть множество других вкусностей, которые вы можете использовать.

Это мой блок переписывания от одного из моих vhosts с веб-сайтом на ZF.

    RewriteCond %{REQUEST_FILENAME} !-l
    RewriteCond %{REQUEST_FILENAME} !-s
    RewriteCond %{REQUEST_FILENAME} !-d
    RewriteCond %{REQUEST_URI}      !^/favicon.ico
    RewriteRule ^.*$ index.php [NC,L]
...