сложное правило перезаписи, необходимое для файла .htaccess - PullRequest
1 голос
/ 12 сентября 2009

У меня много простых правил, работающих на этом сайте, поэтому я знаю, что mod_rewrite работает. Я просто не могу понять, как создать правило для этой ситуации. Я использую Joomla CMS, и один компонент, в частности, генерирует ужасные URL-адреса, которые дублируют другие (красивые) URL-адреса на сайте. Существует непротиворечивый шаблон, поэтому я могу переписать URL-адреса, но это выход из моей лиги за использование регулярных выражений.

Плохие URL выглядят так:

/component/content/article/111-category-name/111-article-name.html?directory=2 

(части "111" - это слагы, сгенерированные для предоставления уникальных идентификаторов категории и части статьи в URL, поэтому эти числа уникальны для каждого URL, а directory=2 изменяется в зависимости от номера ID каталога просматривается)

Хорошие URL (уже на сайте, сгенерированные ядром Joomla SEF) выглядят так:

/category-name/article-name.html

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

Моя вечная благодарность гуру mod_rewrite / регулярных выражений, который может помочь мне. Спасибо! -Kelly

Ответы [ 2 ]

2 голосов
/ 12 сентября 2009

Предполагается, что это происходит в вашем локальном .htaccess.

RewriteRule ^component/content/article/\d+-(.*?)/\d+-(\.*?\.html) /$1/$2 [L]

Если это произойдет в вашем httpd.conf, я считаю, что это незначительное изменение:

RewriteRule ^/component/content/article/\d+-(.*?)/\d+-(\.*?\.html) /$1/$2 [L]

но я не уверен на 100% в этом, потому что редко так делаю.

При желании вы можете добавить строку запроса к результирующему URL:

RewriteRule ^component/content/article/\d+-(.*?)/\d+-(\.*?\.html) /$1/$2 [L,QSA]
1 голос
/ 13 сентября 2009

Попробуйте это правило:

RewriteRule ^component/content/article/[0-9]+-([^/]+)/[0-9]+-([^/]+\.html)$ /$1/$2? [L,R=301]

Пустая строка запроса при замене удалит исходную строку запроса, если она присутствует. А флаг R=301 вызовет внешнее постоянное перенаправление.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...