Я после нормализованных/канонических URL-адресов для SPA с сервером ExpressJS.ExpressJS маршрутизатор нормализованный/канонические URL
Хотя это SPA, который подкреплен серверным маршрутизатором - шаблоны могут немного отличаться для URL-адресов приложений. Одно из отличий - <link rel="canonical" href="https://example.com{{ originalPath }}">
. Не релевантная деталь, но объясняет контекст вопроса. Я ожидаю, что будет только один URL-адрес, который отвечает 200, его варианты перенаправляются на него с 301/302 (работает для живых людей и поисковых систем).
Я бы хотел, чтобы URL-адреса были чувствительными к регистру и строго (без дополнительной косой черты), аналогично параметрам Router
, но неканонические URL-адреса (которые отличаются в случае или дополнительной косой чертой) должны делать 301/302 перенаправление на канонический URL-адрес вместо 404.
В большинстве приложений я просто хочу заставить URL-адреса для маршрутов *
быть нижним (за исключением запросов) без дополнительных косых черт. То есть app.all('*', ...)
, и перенаправляет являются:
/Foo/Bar/ -> /foo/bar
/foo/Bar?Baz -> /foo/bar?Baz
Но могут быть исключения, если маршруты определены в явном виде. Например, есть верблюд-обсаженных маршруты:
possiblyNestedRouter.route('/somePath')...
possiblyNestedRouter.route('/anotherPath/:Param')...
И все неканонические URLs должны быть перенаправлены на канонический (случай параметра остаются без изменений):
/somepath/ -> /somePath
/anotherpath/FOO -> /anotherPath/FOO
Логика канонических URLs вполне прямо, поэтому странно, что я не мог найти что-либо по этой теме относительно ExpressJS.
Каков наилучший способ для этого? Есть уже средние средства, которые могут помочь?
Но как насчет запросов, не связанных с GET? А как насчет чувствительных к регистру маршрутов, таких как 'somePath'? Они могут быть смонтированы, т. Е. Сегмент маршрута не будет первым после первоначального '/' в url. – estus
это позволит получить все типы маршрутов, однако вы можете выполнять перенаправление только по запросам GET и сохранять все содержимое. Если вы хотите попытаться выполнить более разумное сопоставление (после вставки чувствительности к регистру в строке 1), вы можете использовать app._router.stack для перечисления всех маршрутов и попытаться найти чувствительную к регистру часть –