301 перенаправления в htaccess не подтверждают строки запроса

Мне нужно перенаправить старую динамическую страницу на новую ссылку-URL:

Redirect 301 http://www.domain.com/index.php?id=100 http://www.domain.com/newhello

Тем не менее, я продолжаю получать ошибку 404:

Запрашиваемый URL /index.php не найден на этом сервере.

Это как если бы apache игнорировал строку запроса и смотрел только на часть index.php в URL.

Я также играл с RewriteRule и RedirectMatch 301, но у меня был тот же результат. Любой совет будет принят во внимание.

РЕДАКТИРОВАТЬ - ниже - вставка всего содержимого файла.htaccess. Обратите внимание, что это в корневом каталоге:

RewriteEngine on
RewriteBase /

RewriteCond %{HTTP_HOST} ^(www.)?domain.com$
RewriteCond %{REQUEST_URI} !newroot/
RewriteRule (.*) /newroot/$1 [L]

#successful 301 redirect or mod_rewrite directives will be listed from here.

1 ответ

Решение

Вы не можете сопоставить QUERY_STRING, используя Redirect директивы. использование mod_rewrite вместо этого, как это в вашем корневом.htaccess файле:

RewriteEngine On

RewriteCond %{QUERY_STRING} ^id=100$
RewriteRule ^index\.php$ http://www.domain.com/newhello? [L,R=301]

RewriteCond %{HTTP_HOST} ^(www.)?domain\.com$
RewriteCond %{REQUEST_URI} !/newroot/
RewriteRule (.*) /newroot/$1 [L]
Другие вопросы по тегам