Я стараюсь использовать 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, тире и подчеркивания?
Должен ли я каким-то образом продолжать передавать уникальный числовой идентификатор, но просто как-то опустить его из правила перезаписи?
Я полностью упускаю суть? Есть ли приемлемый способ сделать это, о котором я просто не подумал?
Спасибо: -)