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

https://mywebsite.com/content/page.html?id=12&title=my-page-title

к

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

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

RewriteEngine On
RewriteRule ^([^/]*)/([^/]*)\.html$ /content/page.html?id=$1&title=$2 [L]

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

The new url is https://mywebsite.com/content/page.html?id=content&title=page
answer

Термин «переписать» относится к процессу, в котором на входе используется 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=my-page-title

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

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

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

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

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

Превратить

https://mywebsite.com/pages/article.html?id=1&title=Title-Goes-Here

в

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

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

RewriteEngine ON
##External redirect in browser rules here....
RewriteCond %{ENV:REDIRECT_STATUS} ^$
RewriteCond %{THE_REQUEST} \s/([^/]*)/([^.]*)\.html\?id=([^&]*)&title=(\S+)\s [NC]
RewriteRule ^ /%1/%2/%3/%4? [R=301,L]

##Internal rewrite to html file rules here....
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule ^([^/]*)/([^/]*)/([^/]*)/([^/]*)/?$  $1/$2.html?id=$3&title=$4 [QSA,NC,L]

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

<base href="/" />

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

RewriteEngine on
RewriteRule ^article/([0-9]+)/([0-9a-zA-Z_-]+)$ article.html?id=$1&title=$2 [NC,L] 
Новый участник
cat15ets — новый участник этого сайта. Будьте осторожны, запрашивая разъяснения, комментируя и отвечая. Ознакомьтесь с нашим Кодексом поведения .