Правильный ли подход, гарантирующий, что переписанный URL всегда найдет то, что вы ожидаете? - PullRequest
1 голос
/ 14 июня 2011

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

Так, например, я начал с:

http://www.mydomain.com/profile/view.php?id=136

Предполагается, что номер пользователя 136 вызывается ради аргумента Bob T. Smith the 3rd (извинения, Боб, если вы существуете).

Насколько я понимаю, у меня должен быть вариант имени Боба в моем «грязном» URL, потому что вы можете переписать только то, что существует - поэтому мне нужно изменить свой код, чтобы этот URL нашел профиль, который мы Ищите:

http://www.mydomain.com/profile/view.php?id=bob-t-smith-the-3rd

теперь может стать

http://www.mydomain.com/profile/bob-t-smith-the-3rd

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

И поэтому на моей странице вместо того, чтобы искать совершенно уникальный первичный ключ, который называется «136», я теперь должен посмотреть на имя пользователя - но на продезинфицированную версию, поэтому я использую что-то вроде этого - потому что MySQL не может делать регулярные выражения:

SELECT LOWER(REPLACE(REPLACE(REPLACE('Bob T. Smith the 3rd'," ","-"),"_","-"),".",""));

Имя, очевидно, будет заменено на то, что входит в URL, очищено.

Проблема, которую я ожидаю, состоит в том, что без необходимости связывать воедино функции MySQL REPLACE () для обработки всех мыслимых недопустимых символов (что может привести к путанице, их трудно поддерживать и, возможно, неэффективно), и без возможности делать регулярные выражения на стороне запроса, как я могу убедиться, что профиль пользователя найден и возвращается каждый раз?

Если Боб зарегистрировался как 'Bob T. Smith! (The 3rd)' - я все равно очистил бы это в PHP до bob-t-smith-the-3rd из-за preg_replace, который удаляет восклицательный знак и круглые скобки, но мой запрос - если я не добавил больше REPLACE (), не найдет этого пользователя.

Должен ли я просто убедиться, что пользователи могут зарегистрироваться только с использованием A-Z, 0-9, тире и подчеркивания?

Должен ли я каким-то образом продолжать передавать уникальный числовой идентификатор, но просто как-то опустить его из правила перезаписи?

Я полностью упускаю суть? Есть ли приемлемый способ сделать это, о котором я просто не подумал?

Спасибо: -)

Ответы [ 2 ]

0 голосов
/ 14 июня 2011

Поправьте меня, если я что-то упустил, но почему бы вам не удалить имя пользователя из черточек, которые вы добавили в свое правило перезаписи, когда вызывается скрипт php?для вашей базы данных.

0 голосов
/ 14 июня 2011

Почему бы вам не сделать этот запрос?

http://www.mydomain.com/profile/bob-t-smith-the-3rd?id=136

Итак, у вас есть хороший URL, и вам не нужно заниматься поиском имени пользователя.

Если вы боитесьчтобы иметь ? внутри вашего URL, вы также можете сделать это:

http://www.mydomain.com/profile/136/bob-t-smith-the-3rd

и затем проанализировать числовую информацию из строки запроса.

Это также уменьшит работубазы данных.

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