Я пишу свой собственный маленький фреймворк для PHP. Я хочу написать все настолько семантически, насколько это возможно, и у меня все сложилось.
У меня url
разбор class
. Он анализирует весь URL-адрес (схему, поддомен, домен, ресурс и запрос). Затем класс router
решает, что делать с этим url
. Если есть ресурсы, соответствующие url
, он "отображает" его, если не отображает 404, если ресурс запрещен, он отображает 403 и т. Д. В чем проблема:
Допустим, мой сайт находится в: http://en.mysite.com
. Допустим, страниц asd
и &*%
не существует. Итак, у меня есть 2 адреса:
http://en.mysite.com/asd
http://en.mysite.com/&*%($^&#
Конечно, обоих сайтов не существует. Но как должны выглядеть заголовки? Я предсказываю, что:
http://en.mysite.com/asd // header 404 Page not found
http://en.mysite.com/&*% // header 400 Bad request
Однако (по данным нашего гуру-сайта):
http://stackoverflow.com/<< // header 404
http://stackoverflow.com/&;: // header 404
http://stackoverflow.com/&*%($%5E&# // header 400 (which btw is not styled...)
https://www.google.com/%&*(#$*%&@^ // header 404...
Какое правило? Должна ли каждая система предугадывать, какие символы подходят для URL? Как по мне, url должен содержать только [a-z0-9-_.#!]+
. Я использую косые черты в качестве параметров, поэтому мне не нужно ? = &
. Но каково общее правило? Есть ли в спецификации регулярное выражение url?
Кстати: для тех, кто скажет, поставьте 404 и пейте медведь: наверное, буду :).
Но это серьезная проблема в случае SEO. Поскольку 400 - это совсем не то же самое, что 404 в случае позиционирования. И приятно оформить 400 страниц по-своему и сказать кому-то не «страница не найдена», а «вы пытаетесь вставить что-то в мой красивый URL-адрес? Это ПЛОХОЙ ЗАПРОС !