2013-04-09 4 views
1

Я планирую получить несколько URL-адресов. Что моды правила перезаписи я использовал бы сделать следующие преобразования для входящих запросов:Очистить URL с несколькими переменными

http://domain.com/i/ => 
http://domain.com/index.php 

http://domain.com/i/b/233223/c/23333 => 
http://domain.com/index.php?b=233223&c=23333 

http://domain.com/i/dd/9844kjhf/fj/djP756/ee/kjhKJH => 
http://domain.com/index.php?dd=9844kjhf&fj=djP756&ee=kjhKJH 

http://domain.com/r/ => 
http://domain.com/restore.php 

http://domain.com/w/place/chicago => 
http://domain.com/withold.php?place=chicago 

http://domain.com/w/ => 
http://domain.com/withold.php 

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

+0

у вас есть alrea dy попробовал это самостоятельно .htaccess? –

+0

Да, идея заключается в использовании htaccess, но проблема, с которой у меня возникают проблемы, заключается в использовании первой части после домена для соответствия любому количеству страниц (как указано в массиве в htaccess?) – Adrian33

ответ

4

Try:

# If the URI is just /i/, rewrite to index.php 
RewriteRule ^i/?$ /index.php [L] 

# If the URI is /i/ plus some paths, rewrite the paths into query string and let rewrite engine loop 
RewriteRule ^i/([^/]+)/([^/]+)(/?.*)$ /i$3?$1=$2 [L,QSA] 

Это займет столько же узлов пути, сколько установлено для internal recursion limit, по умолчанию оно равно 10. Это означает, что по умолчанию вы можете иметь до 9 наборов параметров если вы не достигли этого предела. Итак:

http://example.com/i/a/1/b/2/c/3/d/4/e/5/f/6/g/7/h/8/j/9 

будет первым матч 2-го правила, и продолжают в цикле:

1. /i/b/2/c/3/d/4/e/5/f/6/g/7/h/8/j/9?a=1 
2. /i/c/3/d/4/e/5/f/6/g/7/h/8/j/9?b=2&a=1 
3. /i/d/4/e/5/f/6/g/7/h/8/j/9?c=3&b=2&a=1 
4. /i/e/5/f/6/g/7/h/8/j/9?d=4&c=3&b=2&a=1 
etc. 

, пока, наконец, вы остаетесь с

/i?j=9&h=8&g=7&f=6&e=5&d=4&c=3&b=2&a=1 

и первое правило будет применяться и вам должно быть в конечном итоге:

/index.php?j=9&h=8&g=7&f=6&e=5&d=4&c=3&b=2&a=1 
+0

это работает, thx, но что произойдет, если указана новая страница, вместо/i/b2/c3 есть/newfile/b2/c3? – Adrian33

+0

@ Adrian33, тогда вам нужно изменить 'i /' на 'newfile /' в двух правилах –

1

Как вы могли бы иметь неограниченное количество параметров в вашем URL-адресе, было бы лучше создать скрипт в вашем приложении для их анализа.

Вы можете использовать .htaccess, чтобы направить все incoing запросы в файл маршрутизации (например index.php)

Options -MultiViews 
RewriteEngine on 
RewriteBase/
RewriteCond %{REQUEST_FILENAME} !-f 
RewriteCond %{REQUEST_FILENAME} !-d 
RewriteRule ^(.*)$ index.php/$1 [QSA,L] 

Затем запустить что-то вроде PHP explode() для разбора URL-адрес

+0

Интересно, d помочь иметь несколько случаев в файле htaccess - 1 параметр, 2 параметра, 3 параметра, 4 параметра (и избежать файла маршрутизации) – Adrian33

+0

что-то вроде этого может работать: http://stackoverflow.com/questions/15735590/mod -rewrite-rules-for-clean-urls-with-optional-parameters – Adrian33

+0

вы могли бы сделать, но что, если бы вы хотели 20 параметров? то вам придется переписать правила mod_rewrite. –

Смежные вопросы