htaccess regex не обрабатывающий URL правильно

Я пытаюсь перенаправить (или 'переписать') более чем 3 000 URL для сайта, где мы обновили SEF большинства страниц содержания для удаления Идентификационного номера, который был не нужным желаемым/. Это должно быть простым процессом с помощью regex; однако, я узнаю, что regex и htaccess являются большим количеством 'искусства', чем наука :-(

Вот правило, которое я имею:

RewriteRule ^topics\/([-0-9a-zA-Z]+)?\/([0-9]+)(-)([0-9a-z,-]+)? http://example.net/topics/$1/$4 [L,R=301]

Большинство URL похоже на это:

http://example.net/topics/management/6309-investing-proceeds-from-sale-of-a-farm-or-ranch

и хорошо работайте с regex; однако, если статья запускается с числа, таким образом имея URL как это:

http://example.net/topics/management/3542-9-new-years-resolutions-for-cattle-producers

Затем regex (выше) захватывает больше, чем просто первый набор 4 идентификационных цифр и также захватывает то первое число (в этом случае "9"), который нужно оставить, приведя к этому:

http://example.net/topics/management/new-years-resolutions-for-cattle-producers

Который, очевидно, не работает.

Кроме того, как обходное решение, я попытался создать некоторые пользовательские правила, чтобы просто обработать несколько СТРАНИЦ/URL, которые имеют этот формат (с числом в начале заголовка статьи) с правилом перед правилом regex как это:

Redirect 301 /topics/management/3542-9-new-years-resolutions-for-cattle-producers http://example.net/topics/management/9-new-years-resolutions-for-cattle-producers

или

RewriteRule ^topics\/([-0-9a-zA-Z]+)?\/([0-9]{1,4}?)(-)([0-9,a-z,-]+)? http://example.net/topics/$1/$4 [L,R=301]

Однако, когда я делаю это, правило regex (далее вниз htaccess файл) все еще работает получающийся в "9" удаляемый.

Я протестировал это на многих различных regex и htaccess испытательных площадках, и они все работают; однако, это продолжает перестать работать на живом сервере.

Веб-сервер: Apache/2.2.25 (Unix) mod_hive/4.0 mod_ssl/2.2.25 OpenSSL/1.0.0-fips mod_bwlimited/1.4 mod_fcgid/2.3.6

И я имею, уже связываются с моим сервером/хостинговой компанией, и они говорят, что у них нет экспертных знаний, чтобы смочь решить этот вопрос.

Кто-либо может видеть, где проблема здесь? Я перерыл сотни сообщений форума здесь и другие места ни с кем имеющим вполне ту же проблему.

2
задан 15 April 2015 в 17:13
1 ответ

Я просто попробовал вашу настройку с небольшим изменением по отношению к вашей конфигурации. Я настраиваю его в файле конфигурации вместо . htaccess используя это (обратите внимание, что он ищет начало с /topics -instead of topics-):

RewriteRule ^/topics\/([-0-9a-zA-Z]+)?\/([0-9]+)(-)([0-9a-z,-]+)? http://example.net/topics/$1/$4 [L,R=301]

Тогда тест работает, как и ожидалось:

[root@proxy conf]# curl -i http://localhost/topics/management/3542-9-new-years-resolutions-for-cattle-producers
HTTP/1.1 301 Moved Permanently
Date: Wed, 15 Apr 2015 14:48:09 GMT
Server: Apache
Location: http://example.net/topics/management/9-new-years-resolutions-for-cattle-producers
Content-Length: 289
Content-Type: text/html; charset=iso-8859-1

EDIT1:

Пожалуйста, попробуйте это:

RewriteRule ^topics\/([-0-9a-zA-Z]+)?\/(\d+)(-)([0-9a-z,-]+)? http://example.net/topics/$1/$4 [L,R=301]

Вместо того, чтобы использовать ([0-9]+) для чисел перед первым тире, его заменили на (\d+), на моей установке все еще работает, возможно в вашей (\d+) делает вашу компиляцию apache более комфортной.

0
ответ дан 3 December 2019 в 14:46

Теги

Похожие вопросы