Redirect 301 / Переписать головоломку - PullRequest
3 голосов
/ 17 июня 2011

На моем сайте пользователи могут добавлять различные URL-адреса, которые необходимо перенаправить.

Например; из этого: domain.com/oldpage/36/

На это: domain.com/newpage/47/

Они добавляются в .htaccess следующим образом:

Redirect 301 /oldpage/36/ /new-page/47/

Но при доступе к старой странице они получают это:

domain.com / NewPage / 47 /? PID = 36 & ИмяСтраницы = oldpage

Я почти уверен, что эти правила переписывания вызывают это затруднение:

RewriteRule ([^.]+)/([0-9]+)/$ index.php?pid=$2&pagename=$1
RewriteRule ([^.]+)/([0-9]+)/([^.]+) index.php?pid=$2&pagename=$1&vars=$3

Тем не менее, mod_rewrite не является моей сильной стороной, поэтому я понятия не имею, как это исправить.

Есть идеи?

Ответы [ 2 ]

2 голосов
/ 17 июня 2011

Добавление ? заставляет Rewrite не добавлять строку запроса к URL.

так что это должно работать:

Redirect 301 /oldpage/36/ /new-page/47/?

В качестве меры предосторожности вы также можете добавить его в конец:

RewriteRule ([^.]+)/([0-9]+)/$ index.php?pid=$2&pagename=$1?
RewriteRule ([^.]+)/([0-9]+)/([^.]+) index.php?pid=$2&pagename=$1&vars=$3?

Но только если они нужны

2 голосов
/ 17 июня 2011

Так как вы все равно уже используете mod_rewrite, я полагаю, вам следует также выполнить переадресацию с использованием перезаписей

RewriteRule /oldpage/36/ /new-page/47/ [R=301]

Это «перезапишет» URL со старого на новый и перенаправит браузер на новый URL с кодом состояния 301. Директива [R] означает редирект, который также останавливает обработку других правил, поэтому другие правила будут обрабатываться только тогда, когда новый запрос будет отправлен из broswer с новым URL-адресом.

...