Регулярное выражение - знак минус / дефис - PullRequest
1 голос
/ 27 октября 2011

У меня есть URL, который содержит следующее

/4-new-south-wales/499-some-category.html

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

У меня есть следующее правило

RewriteRule (.*)\d+-(.*) $1$2 [R=301,L]

Что дает мне следующее

/4-new-south-wales-nsw/49cross-breeds-designer-dogs.html

Они могут быть вложены на любом уровне. например,

/a/b/c/4-new-south-wales-nsw/49123123-cross-breeds-designer-dogs.html

Я бы хотел закончить с

/a/b/c/new-south-wales-nsw/cross-breeds-designer-dogs.html

Спасибо за вашу помощь.

Ответы [ 3 ]

1 голос
/ 27 октября 2011
(/.*/)\d+-(.*)

Исправит ли это?

. * Является жадным, поэтому он также будет соответствовать первым числовым символам, оставляя \ d + только последнюю цифру, поэтому ваш первыйгруппа захвата заканчивается тем, что: / 4-новый Южный Уэльс / 49

0 голосов
/ 27 октября 2011

Чтобы заменить несколько произвольно размещенных экземпляров шаблона /ddd-XXX в пути URL-адреса, Apache необходимо заменять каждое вхождение по одному, а затем рекурсивно перенаправлять URL-адрес после каждой замены.Но чтобы сделать это правильно, вам нужно добавить оператор RewriteBase в файл .htaccess и задать для него путь, содержащий файл .htaccess.

Вот проверенный .htaccessфайл, который делает то, что вы ищете:

<IfModule mod_rewrite.c>
    RewriteEngine on

    # Set RewriteBase to the URL-path containing this .htaccess file:
    RewriteBase /apache

    # Redirect first "/ddd-XXX" path segment to: "/XXX":
    RewriteRule ^((?:(?!\d+-)[^/]+/)*)\d+-(.*)$ $1$2 [R=301,L]

    # Rewrite the resulting URL path to show.php as a query string
    # (if resulting URL-path is NOT a real file or a directory).
    RewriteCond %{REQUEST_FILENAME} !-f
    RewriteCond %{REQUEST_FILENAME} !-d
    RewriteRule ^(.+)$ show.php?path=$1

</IfModule>

В моей тестовой системе этот файл .htaccess находится в каталоге /apache (это то, что я установил для RewriteBase).Обратите внимание, что окончательный путь к перенаправленному URL не может быть реальным файлом!В приведенном выше файле .htaccess у меня есть дополнительное правило, которое обрабатывает окончательный перенаправленный URL-адрес (который не указывает на реальный файл) и передает этот путь в качестве переменной запроса в сценарий show.php.

0 голосов
/ 27 октября 2011

Попробуйте следующее:

RewriteRule (.*?)\d+-(.*?)\d+-(.*) $1$2$3 [R=301,L]

* * * * * * * * * * * * * * * * * * * * * * * * *

* *

Смотрите и тестируйте на Рубулярном

...