htaccess перенаправляет проблему со старыми URL-адресами

#apache #.htaccess #url #redirect #mod-rewrite

#apache #.htaccess #url #перенаправление #мод-перезапись

Вопрос:

У меня есть старый веб-сайт, созданный с помощью php, и все URL-адреса имеют одинаковую схему

 domain.de/index.php?<sitename>
 

Первым параметром URL-адреса является имя сайта.

Теперь я хочу перенаправить некоторые из этих URL-адресов, как будет выглядеть правильное перенаправление, которое перенаправляет только одну из этих страниц, а не все из них

Заранее спасибо.

Я попробовал это:

 Redirect 301 /index.php?impressum /impressum
 

Пример:

Старый URL: /index.php?oldurl новый URL: /newurlWithCompletlyDifferentURLName

Обновить:

 # BEGIN WordPress
# Die Anweisungen (Zeilen) zwischen „BEGIN WordPress“ und „END WordPress“ sind
# dynamisch generiert und sollten nur über WordPress-Filter geändert werden.
# Alle Änderungen an den Anweisungen zwischen diesen Markierungen werden überschrieben.
<IfModule mod_rewrite.c>
RewriteEngine On
RewriteRule .* - [E=HTTP_AUTHORIZATION:%{HTTP:Authorization}]
RewriteBase /
RewriteRule ^index.php$ - [L]
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule . /index.php [L]
</IfModule>

# END WordPress

RewriteCond %{THE_REQUEST} s/ index.php?impressum1s [NC]
RewriteRule ^ /impressum? [R=301,L]
 

Обновить
введите описание изображения здесь

Комментарии:

1. Также я не вижу смысла удалять выбранные исходные теги OP

Ответ №1:

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

 RewriteEngine ON
RewriteCond %{QUERY_STRING} !^$
RewriteRule ^index.php/? /%{QUERY_STRING}? [R=301,NC,L] 
 

Ответ №2:

Полный .htaccess:

 # BEGIN WordPress
# Die Anweisungen (Zeilen) zwischen „BEGIN WordPress“ und „END WordPress“ sind
# dynamisch generiert und sollten nur über WordPress-Filter geändert werden.
# Alle Änderungen an den Anweisungen zwischen diesen Markierungen werden überschrieben.
<IfModule mod_rewrite.c>
RewriteEngine On
RewriteBase /

RewriteCond %{THE_REQUEST} s/ index.php?impressum1s [NC]
RewriteRule ^ /impressum? [R=301,L]

RewriteRule .* - [E=HTTP_AUTHORIZATION:%{HTTP:Authorization}]

RewriteRule ^index.php$ - [L]

RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule . /index.php [L]
</IfModule>
# END WordPress
 

Предыдущий ответ:

Это может сработать для вас в корневом каталоге вашего сайта .htaccess:

 RewriteEngine On

# all rules that have different redirect URL
RewriteCond %{THE_REQUEST} s/ index.php?oldUrl1s [NC]
RewriteRule ^ /newurl1? [R=301,L]

RewriteCond %{THE_REQUEST} s/ index.php?oldUrl2s [NC]
RewriteRule ^ /newurl2? [R=301,L]

# a generic rule that will redirect /index.php?foobar to /foobar
RewriteCond %{THE_REQUEST} s/ index.php?(S )s [NC]
RewriteRule ^ /%1? [R=301,L]
 

Пожалуйста, поймите, что Redirect директива не поддерживает регулярные выражения, и она просто соответствует стартовому URI. Он не может соответствовать строке запроса.