Рейтинг:0

Htaccess для перезаписи URL с двумя параметрами

флаг cn

Я хочу переписать этот тип URL

https://mywebsite.com/content/page.html?id=12&title=название-моей-страницы

к

https://mywebsite.com/12/my-page-title.html

Используя generateit.net/mod-rewrite/, я получил следующее правило:

RewriteEngine включен
Правило перезаписи ^([^/]*)/([^/]*)\.html$ /content/page.html?id=$1&title=$2 [L]

Но при тестировании на htaccess.madewithlove.com/ я получаю следующее:

Новый URL-адрес: https://mywebsite.com/content/page.html?id=content&title=page.
cat15ets avatar
флаг cn
Это правило было задано генератором правил перезаписи. Я также пробовал разные правила безрезультатно. Я пытался понять, как работают правила перезаписи, но не нашел ни одного полезного для себя руководства.Кажется, все они упускают ключевые моменты в объяснении того, как это работает, или это просто проблема с моей логикой...
Tilman Schmidt avatar
флаг bd
(a) Я посмотрел сайт генератора, который вы назвали. Вы неверно истолковали то, что он предлагает сделать. Когда говорится «превратите динамические URL-адреса в статические URL-адреса, удобные для поисковых систем», это означает, что с точки зрения посетителя. (b) Работа правила перезаписи проста: попытайтесь сопоставить входящий URL-адрес с регулярным выражением, указанным в качестве первого аргумента оператора RewriteRule, и, если это так, замените его строкой, указанной в качестве второго аргумента.
cat15ets avatar
флаг cn
Я не понимаю, что вы говорите, что я сделал неправильно. Перейдите по адресу: https://www.generateit.net/mod-rewrite/, введите https://mywebsite.com/content/page.html?id=12&title=my-page-title в поле URL и нажмите REWRITE. URL-адрес
cat15ets avatar
флаг cn
Генератор перезаписи модов можно использовать для преобразования динамических URL-адресов в статические URL-адреса, удобные для поисковых систем. Статические URL-адреса обычно лучше ранжируются в поисковых системах, чем длинные сложные динамические URL-адреса с большим количеством параметров, их легче индексировать, а также они более дружелюбны для конечного пользователя. Модуль apache mod_rewrite преобразует URL-адреса в определенном формате в другой формат и может быть очень полезен для индексации сайта с динамическим содержимым. С помощью этого инструмента вы можете преобразовать длинные динамические URL-адреса в короткие статические URL-адреса.
cat15ets avatar
флаг cn
Не знаю, что я из этого не понял. Мне нужно **ПРАВИЛО**, которое превращает **длинные динамические URL** в **короткие статические URL**.
Tilman Schmidt avatar
флаг bd
Определите, что вы подразумеваете под «превратиться в».
cat15ets avatar
флаг cn
С их веб-сайта: ** С помощью этого инструмента вы можете преобразовать длинные динамические URL-адреса в короткие статические URL-адреса. ** Трансформируй, превращай, переписывай, принимай как хочешь. Может быть, я слишком тупой для этого, или здесь есть другие вещи...
Tilman Schmidt avatar
флаг bd
Давайте [продолжим это обсуждение в чате](https://chat.stackexchange.com/rooms/133536/discussion-between-tilman-schmidt-and-cat15ets).
Рейтинг:1
флаг bd

Термин «переписать» относится к процессу, который вход URL-адрес, запрошенный посетителем вашего веб-сайта, и его вывод URL-адрес, переданный вашей CMS для создания запрошенной страницы.

Служба в https://www.generateit.net/mod-rewrite/ генерирует правило перезаписи, позволяющее получить доступ к вашим страницам через URL-адреса формы

https://mywebsite.com/12/my-page-title.html

даже если базовая система ожидает URL-адреса формы

https://mywebsite.com/content/page.html?id=12&title=название-моей-страницы

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

Чтобы проверить это с сервисом на https://htaccess.madewithlove.com/, вы должны ввести

https://mywebsite.com/12/my-page-title.html

в поле «Введите URL-адрес, к которому применяются правила». Казалось бы, вы вошли в рерайт результат там вместо.

cat15ets avatar
флаг cn
И какое правило я должен использовать в своем htaccess, чтобы получить **https://mywebsite.com/12/my-page-title.html** из **https://mywebsite.com/content/page.html?id =12&title=название-моей-страницы**
флаг kz
@cat15ets Вы не делаете этого в `.htaccess`. Вы должны вручную (или в своей CMS) изменить URL-адреса в источнике HTML, чтобы они имели форму `example.com/12/my-page-title.html`. Однако, сказав это, вы можете (необязательно) реализовать внешнее перенаправление для преобразования сторонних запросов из `/content/page.html?id=12&title=my-page-title` в желаемый канонический URL-адрес (например, `/12 /my-page-title.html`) — но это только для SEO, если вы изменили существующую структуру URL, которая была проиндексирована/связана с ней. Это не требуется для того, чтобы ваш веб-сайт работал с желаемыми «красивыми» каноническими URL-адресами.
Рейтинг:0
флаг cn

Спасибо RavinderSingh13 из StackOverflow за помощь с кодом.

Повернуть

https://mywebsite.com/pages/article.html?id=1&title=Title-Goes-Здесь

в

https://mywebsite.com/pages/article/1/Title-Goes-Here

Использовать

RewriteEngine включен
##Внешний редирект в правилах браузера здесь....
Условия перезаписи %{ENV:REDIRECT_STATUS} ^$
RewriteCond %{THE_REQUEST} \s/([^/]*)/([^.]*)\.html\?id=([^&]*)&title=(\S+)\s [NC]
Правило перезаписи ^ /%1/%2/%3/%4? [Р=301,Л]

##Внутренние правила перезаписи в html-файл здесь....
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
Правило перезаписи ^([^/]*)/([^/]*)/([^/]*)/([^/]*)/?$ $1/$2.html?id=$3&title=$4 [QSA ,НЗ,Л]

Кроме того, после элемента head мне пришлось поставить:

<base href="/" />

Если у вас есть atricle.html в основной папке, с помощью htaccess вы также можете использовать:

RewriteEngine включен
RewriteRule ^article/([0-9]+)/([0-9a-zA-Z_-]+)$ article.html?id=$1&title=$2 [NC,L] 

Ответить или комментировать

Большинство людей не понимают, что склонность к познанию нового открывает путь к обучению и улучшает межличностные связи. В исследованиях Элисон, например, хотя люди могли точно вспомнить, сколько вопросов было задано в их разговорах, они не чувствовали интуитивно связи между вопросами и симпатиями. В четырех исследованиях, в которых участники сами участвовали в разговорах или читали стенограммы чужих разговоров, люди, как правило, не осознавали, что задаваемый вопрос повлияет — или повлиял — на уровень дружбы между собеседниками.