Заменить строку запроса расширением файла с помощью htaccess

#apache #.htaccess #mod-rewrite #url-rewriting

#apache #.htaccess #mod-переписать #url-переписывание

Вопрос:

У меня есть эта ссылка https://career.guru99.com/top-50-oops-interview-questions/?format=pdf

Я хочу перенаправить его на https://career.guru99.com/pdf/top-50-oops-interview-questions.pdf

Я создал следующее правило htaccess

 RewriteEngine On
RewriteCond %{QUERY_STRING} format=pdf [NC]
RewriteRule ^top-50-oops-interview-questions /pdf/top-50-oops-interview-questions.pdf? [R=301,L]
 

Но проблема в том, что у меня более 200 ссылок, и мне придется вручную добавлять так много записей в htacess, что также замедляет работу сайта. Есть ли какое-нибудь регулярное выражение, которое может помочь в этом?

Я хочу /?format=pdf , чтобы меня заменили на .pdf

Ответ №1:

Не могли бы вы попробовать следующее, написанное и протестированное с показанными примерами. Я просматриваю переменную THE_REQUEST и получаю из нее соответствующее значение формата, а затем при перезаписи помещаю его значение.

 RewriteEngine ON
RewriteCond %{THE_REQUEST} s(.*?)/?format=([^s]*)s [NC]
RewriteRule ^(.*)$ http://%{HTTP_HOST}/%2%1.%2 [NE,QSD,L]
 

Ответ №2:

Я хочу /?format=pdf , чтобы меня заменили на .pdf :

Вы можете попробовать это правило:

 RewriteEngine On

RewriteCond %{QUERY_STRING} ^format=(pdf)$ [NC]
RewriteRule ^([w-] )/?$ /%1/$1.%1? [R=301,END,NE]
 

Комментарии:

1. RewriteRule ^([w-] )/?$ /%1/$1.%1? [R=301,END,NE] потому что в конце он запрашивает тип файла.