Лучший способ получить данные с «чистых» и «грязных» URL - PullRequest
1 голос
/ 31 декабря 2008

Я пишу приложение, которое получает данные из URL-адресов, но я хочу сделать его опцией, использует ли пользователь «чистые» URL-адреса (например: http://example.com/hello/world) или «грязные» URL-адреса (например: http://example.com/?action=hello&sub=world).

Как лучше всего получить переменные из обеих схем URL?

Ответы [ 4 ]

3 голосов
/ 31 декабря 2008

Если ваш mod_rewrite имеет правило, подобное следующему:

RewriteRule ^hello/world /?action=hello&sub=world [NC,L]

или, более обобщенно:

// Assuming only lowercase letters in action & sub..
RewriteRule ^([a-z]+)/([a-z]+) /?action=$1&sub=$2 [NC,L]

затем вызывается тот же PHP-скрипт с переменными $_REQUEST, доступными для любого доступа пользователя к странице (грязный или чистый URL).

Недавно мы переместили большую часть нашего сайта в чистые URL-адреса (по-прежнему поддерживая более старые, «грязные» URL-адреса) и правила, подобные приведенным выше, означали, что нам не нужно было переписывать код, основанный только на параметрах $_REQUEST правила mod_rewrite.

Обновление

Mod_rewrite - это модуль Apache, но для IIS также доступен ряд опций .

Какой бы веб-сервер вы не решили поддерживать, подход mod_rewrite, скорее всего, приведет к наименьшему объему работы для вас. Без этого вам, вероятно, придется создать множество файлов, чтобы имитировать структуру ваших чистых URL, например, в корне вашего веб-сервера вы создадите каталог hello, поместив в него файл world, содержащий что-то вроде следующего:

// Set the $_REQUEST params to mimic dirty url
$_REQUEST['action'] = 'hello';
$_REQUEST['sub'] = 'world';
// Include existing file so we don't need to re-do our logic
// (assuming index.php at web root)
include('../index.php');

По мере увеличения числа параметров, которые вы хотите обрабатывать «чисто», увеличивается и количество каталогов и файлов-заглушек, которые вам требуются, что значительно увеличит ваши затраты на обслуживание.

mod_rewrite разработан именно для такого рода проблем и теперь поддерживается как в IIS, так и в Apache, поэтому я настоятельно рекомендую идти в этом направлении!

1 голос
/ 31 декабря 2008

Если ваше приложение запущено на сервере Apache, я бы порекомендовал использовать mod_rewrite.

По сути, вы кодируете свое приложение, чтобы использовать «грязные» URL-адреса внутри. Под этим я подразумеваю, что вы все еще можете использовать «чистые» URL в шаблонах и тому подобное, но вы используете «грязную» версию при разборе URL. Например, вы настоящий и "грязный" URL-адрес www.domain.com/index.php?a=1&b=2, внутри вашего кода вы все еще будете использовать $ _GET ['a'] и $ _GET [' б ']. Затем с помощью mod_rewrite просто сделайте URL-адреса, такие как www.domain.com/1/2/, указав на «грязный» URL-адрес. (это всего лишь пример того, как все можно сделать)

0 голосов
/ 31 декабря 2008

Быстрый и грязный способ - просто проверить наличие переменных GET. Если есть, то это грязно, если нет, это чисто. Конечно, это зависит от того, что именно вы подразумеваете под грязными URL.

0 голосов
/ 31 декабря 2008

звучит как боль, но я предполагаю создать функцию, которая анализирует URL для каждого запроса. Сначала определите, является ли это «грязным» или «чистым» URL. Для этого я сначала посмотрю на наличие символа вопросительного знака и продолжил оттуда (дополнительная проверка, очевидно, потребуется) Для «грязного» URL-адреса используйте обычные возможности поиска метода PHP ($ variable_name). Для «чистого» я ​​бы использовал регулярные выражения. Это был бы самый гибкий (и эффективный) способ для анализа URL и извлечения потенциальных переменных.

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