#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. Он не может соответствовать строке запроса.