mod_Rewrite условия и правила (в замешательстве) помогите пожалуйста - PullRequest
0 голосов
/ 12 апреля 2011

Помогите пожалуйста,

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

У меня есть текущий URL:

http://www.mydomain.com/news/dentistry_dental/article_detail.php?article=2968&title=redefining-oral-hygiene-intervention

Я очищаю свои URL, поэтому теперь создал правило перезаписи, чтобы проанализировать следующее для предыдущего URL:

http://www.mydomain.com/dental_news/2968/Redefining-oral-hygiene-intervention

Правило, которое я использовал для этого в файле .htaccess, приведено ниже:

RewriteRule ^dental_news/([^/]*)/([^/]*)$ /news/dentistry_dental/article_detail.php?article=$1&title=$2 [L]

Это работает, как и ожидалось, однако ... Мне нужно также иметь старый URL (который индексируется во многих поисковых системах), чтобы теперь указывать на НОВЫЙ URL с перенаправлением 301.

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

Кто-нибудь знает, как я могу добиться 2-стороннего перенаправления без зацикливания?

Любая помощь будет принята с благодарностью

1027 * EDIT *

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

У меня есть другой URL www.mydomain.com/news/dentistry_dental/index.php, который я хочу перенаправить с 301 на www.mydomain.com/dental_news/

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

Любая помощь будет велика:)

С уважением M

1 Ответ

0 голосов
/ 12 апреля 2011

Попробуйте следующее. Первое условие должно защитить вас от цикла перенаправления (оно соответствует только запросам, не начинающимся с /dental_news. %1 и %2 будут соответствовать соответствующим группам регулярных выражений из предыдущего RewriteCond. Кроме того, конечный ? на RewriteRule удалит строку запроса при перенаправлении.

RewriteCond %{REQUEST_URI} !^\/dental_news\/
RewriteCond %{QUERY_STRING} article=([0-9]*)&title=(.*)$
RewriteRule (.*) /dental_news/%1/%2? [L,R=301]

Надеюсь, это поможет.

EDIT : Я изменил последнюю группу второй RewriteCond, чтобы она соответствовала до $ из $fr=1, если предполагается, что это &1, вы можете изменить конец RewriteCond на группу ([^&]*) .

RewriteCond %{REQUEST_URI} !^\/dental_news\/
RewriteCond %{QUERY_STRING} article=([0-9]*)&title=([^$]*)$
RewriteRule (.*) /dental_news/%1/%2? [L,R=301]

EDIT :

RewriteEngine On

RewriteRule ^dental_news/([^/]*)/([^/]*)$ news/dentistry_dental/article_detail.php?article=$1&title=$2&redirect [L]

RewriteCond %{REQUEST_URI} !^/dental_news/
RewriteCond %{QUERY_STRING} article=([0-9]*)&title=([^&]*)$
RewriteRule (.*) /dental_news/%1/%2? [L,R=301]
...