Apache 301 Redirect и сохранение почтовых данных

Я реализовал SEO URL с использованием перенаправлений Apache 301 в "redirect.cfm" в корне сайта, который обрабатывает все создание URL и доставку контента.

Почтовые данные теряются во время перенаправления 301.

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

Есть ли что-то, что можно сделать?

Спасибо

4 ответа

Решение

Данные POST отбрасываются при перенаправлении, поскольку клиент выполнит запрос GET по URL-адресу, указанному в 301. Период.

Единственный вариант - преобразовать параметры POST в параметры GET и добавить их в конец URL-адреса, на который вы перенаправляете. Это нельзя сделать при перезаписи файла.htaccess.

Один из вариантов - перехватить POST-запросы на URL-адрес, который будет перенаправлен, и передать его на страницу для обработки перенаправления. Вам нужно будет выполнить транспонирование параметров в коде, а затем выдать заголовок redirect с добавленным параметром new url таким образом.

Обновление. Как указано в комментариях к этому ответу, если вы перенаправляете на другой URL-адрес, указывающий параметры POST, и этот URL-адрес также доступен без параметров (или параметры являются переменными), вы должны указать ссылку на канонический URL-адрес для страницы.,

Скажем, перенаправления формы POST, перенесенные на следующий ресурс GET:

   http://www.example.com/finalpage.php?form_data_1=123&form_data_2=666

Вы добавили бы эту ссылку в раздел заголовка страницы:

   <link rel="canonical" href="http://www.example.com/finalpage.php" />

Это обеспечило бы всю ценность SEO для http://www.example.com/finalpage.php и позволило бы избежать возможных проблем с дублированным контентом.

Используя 307 должно быть именно то, что вы хотите

307 Temporary Redirect (since HTTP/1.1)
In this case, the request should be repeated with another URI; however, future requests
should still use the original URI.[2] In contrast to how 302 was historically implemented,
the request method is not allowed to be changed when reissuing the original request. For
instance, a POST request should be repeated using another POST request

- Википедия

Строго говоря, правильный код — 308, что соответствует постоянному характеру перенаправления 301 и сохраняет метод запроса:

https://developer.mozilla.org/en-US/docs/Web/HTTP/Status/308

Поддержка кода 308 во всех браузерах приемлема .

Использование 301 переадресаций для общего перезаписи URL - не лучший способ. Это проблема производительности (особенно для мобильных устройств, но также и в целом), поскольку она удваивает количество запросов на вашу страницу.

Подумайте об использовании инструмента перезаписи URL, как у Tuckey URLrewriteFilter или апач mod_rewrite,

То, что Рэй сказал, все верно, это просто дополнительный комментарий к вашему общему подходу.

Другие вопросы по тегам