URL переписываются с использованием шаблона регулярных выражений - PullRequest
0 голосов
/ 23 ноября 2018

Мне нужно переписать URL-адреса с помощью .htaccess, чтобы перенаправить всех пользователей со старого файла Sitemap на новые URL-адреса.Старые URL-адреса выглядят так:

http://server.linux.example.com/a/v/c/document_title1.php
http://server.linux.example.com/jp/x/1/o/document_title32.php
http://server.linux.example.com/kr/a/a/2/document_title12343.php
http://server.linux.example.com/cn/6/z/z/document_title124.php

Мне нужно сохранить первый каталог, а затем удалить все подкаталоги, включая косые черты и символы (буквы и цифры между /), чтобы новые URL-адреса выглядели так:

http://server.linux.example.com/document_title1.php
http://server.linux.example.com/jp/document_title32.php
http://server.linux.example.com/kr/document_title12343.php
http://server.linux.example.com/cn/document_title124.php

Это то, что я сделал до сих пор, используя справку от stackoverflow.com.

(?<=http://server\.linux\.example\.com/)(jp/|kr/|cn/)?.*(?=\.php)

regex101.com показывает, что это допустимое регулярное выражение, но у меня возникли проблемы с реализациейэто в .htaccess, так как я получаю 500 ошибок.

ReWriteRule (?<=http://server\.linux\.example\.com/)(jp/|kr/|cn/)?.*(?=\.php)

Что я делаю не так?

Ответы [ 2 ]

0 голосов
/ 24 ноября 2018

Попробуйте с помощью:

RewriteEngine on 
RewriteRule ^/?(jp/|kr/|cn/)?.+/([^/]+\.php)$ /$1$2 [L]

Вы можете перенаправить (и не только переписать) с [R=302] вместо [L].

. И чтобы найти проблему, посмотрите на свою ошибкужурналы.

0 голосов
/ 23 ноября 2018

Я бы выбрал такой подход:

RewriteEngine on 
RewriteRule ^/?([^/]+)/.+/([^/]+\.php)$ /$1/$2 [END]

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

Это правило должно работать аналогичным образом в файлах динамической конфигурации (".htaccess") и в реальных конфигурациях хостов http-серверов.

И общее замечание: вы всегда должны предпочитать размещать такие правила в конфигурации хоста http-серверов вместо использования файлов динамической конфигурации (".htaccess").Эти динамические конфигурационные файлы добавляют сложность, часто являются причиной неожиданного поведения, их трудно отладить, и они действительно замедляют работу http-сервера.Они предоставляются только в качестве последнего варианта для ситуаций, когда у вас нет доступа к реальной конфигурации хоста http-серверов (читай: действительно дешевые поставщики услуг) или для приложений, настаивающих на написании своих собственных правил (что является очевидным кошмаром безопасности).

...