Как перенаправить сообщение старого стиля в новый формат URL? - PullRequest
0 голосов
/ 28 ноября 2018

У меня есть веб-сайт, который будет преобразован в новый cms.Причина этого заключается в том, чтобы не потерять входящие ссылки и не получить мертвые страницы в поисковых системах.

На старом веб-сайте URL-адреса имеют следующую структуру:

website.com/4212/write-a-google-review

и в новом:

website.com/blog?write-a-google-review

, хотя у меня есть некоторая гибкость в том, что я могу добавить идентификатор в строку URL, как в любом из:

website.com/blog?4212&write-a-google-review
website.com/blog?4212-write-a-google-review
website.com/blog?4212/write-a-google-review
website.com/blog?write-a-google-review&4212

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

RewriteRule ^4212/?$ blog?4212/write-a-google-review [NC,L] ## 
RewriteRule ^[4212]?$ blog?4212/write-a-google-review [NC,L] ##

Комментарий добавлен для проверки 1-го ответа (автор Croises).

Какя обнаружил, что это работает, но только если я дал полный URL-адрес с https://www.mywebsite.com/:

RewriteRule write-a-google-review/?$ https://www.mywebsite.com/blog?write-a-google-review [NC,L]

Когда я добавил следующие две строки, это привело к неработающей странице, отсутствию стилей и выводу содержимого публикации:

RewriteCond %{REQUEST_FILENAME} !-f
RewriteRule ^(\d+(?:/.+?)?)/?$ blog?$1 [L]

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

RewriteCond %{REQUEST_FILENAME} !-f
RewriteRule ^(\d+(?:/.+?)?)/?$ http://www.mywebsite.com/blog?$1 [L]

Ответы [ 2 ]

0 голосов
/ 28 ноября 2018
RewriteCond %{QUERY_STRING} (^|&)blog\?4212($|&)
RewriteCond %{QUERY_STRING} (^|&)write-a-google-review($|&)
RewriteRule ^website\.com/index\.php$ /website.com/blog?4212-write-a-google-review&%{QUERY_STRING}

С

website.com/index.php?blog?4212&write-a-google-review

К

website.com/blog?4212-write-a-google-review

Regex

RewriteRule ^([a-z]+)/([0-9]+)/([a-z0-9\-]+)?$ index.php?alias=$1\?$2\-$3 [L]

Array
(
    [alias] => blog?8753-lowering-expectations-with-skype
)
0 голосов
/ 28 ноября 2018

Вы можете использовать:

RewriteCond %{REQUEST_FILENAME} !-f
RewriteRule ^(\d+(?:/.+?)?)/?$ blog?$1 [R=301,QSA,L]
...