Перезапись URL на основе ввода формы - PullRequest
1 голос
/ 12 апреля 2011

Я создаю титульную страницу для моего сайта с помощью единой формы и вводимого текста в стиле Google. Это работает нормально, однако, я хочу создать красивый URL на основе ввода. Допустим, мой ввод называется «id», и с помощью метода GET формы и действия, определенного для «/ go /», при отправке URL будет:

site.com/go/?id=whateverIType

и я хочу изменить его на

site.com/go/whateverIType

Я думал о Mod Rewrite, но если пользователь вставил что-то в URL, например:

site.com/go/?dontwant=this&id=whateverIType&somemore=trash

Я хочу игнорировать другие переменные, кроме "id", и переписать правило.

Какой лучший способ сделать это? Заранее спасибо!

PS: я использую CodeIgniter, может быть, я тоже могу что-то использовать для этого. У меня уже есть контроллер для "go".

Ответы [ 3 ]

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

Mod_rewrite поддерживает условия и правила с RegEx, так что вы можете иметь правило, соответствующее ?id=XXXX, которое извлечет его из URL ( сохраняя остальные параметры), и соответственно переписали URL.

Однако ... я не думаю, что вы захотите это сделать, потому что если вы переписаете URL-адрес на /go/Some+Search+Query, вы не сможете получить его, скажем, PHP, без разбора URL-адреса. вручную.

Действительно сложно иметь настраиваемые, оптимизированные для SEO URL-адреса с пользовательским вводом, но это технически возможно. Вам лучше оставить в части ?id=XXX, и вместо этого, используя mod_rewrite в противоположном подходе ... взять все URL-адреса, которые соответствуют шаблону /go/My+Search+Terms, и перевести это обратно во что-то вроде ?id=My+Search+Terms, таким образом, вы ' Вы сможете легко разобрать значение, используя параметры GET URL. Это не редкая практика - Google фактически все еще использует параметры URL для ввода данных пользователем (пример URL: http://www.google.com/search?q=test).

Имейте в виду, что mod_rewrite переписывает URL-адрес раньше, чем что-либо еще (даже PHP), поэтому все, что вы делаете с URL-адресом, нужно обрабатывать. Думайте о mod_rewrite как о глобальном поиске и замене URL-адресов на основе регулярных выражений при каждом вызове страницы на сервере. Например, если вы удалите строку запроса, вам необходимо убедиться, что ваш веб-сайт / приложение / что-либо еще учитывает это.

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

Я не знаком с CodeIgniter, но вы можете попробовать следующее RewriteRule

RewriteEngine on
RewriteCond %{REQUEST_URI}  ^\/go\/
RewriteCond %{QUERY_STRING} id=([^&]*)
RewriteRule (.*) /go/%1? [L,R]

%1 ссылается на группу регулярных выражений из предыдущего RewriteCond, а завершающий ? удалит строку запроса из перенаправленного URL.

Надеюсь, это поможет.

1 голос
/ 12 апреля 2011

В application/config/routes.php

$route['go/(:any)'] = "go/index/$1";

Где go - ваш контроллер, а index - действие индекса.

http://codeigniter.com/user_guide/general/routing.html

Вы можете использовать что-то подобное в вашем .htaccess, если вы еще этого не сделали:

RewriteEngine on
RewriteCond $1 !^(index\.php|images|css|js|robots\.txt)
RewriteRule ^(.*)$ /index.php/$1 [L]
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...