Как перенаправить URL-адреса на основе строки запроса?
Я успешно переносил сайт Wordpress на Drupal. К сожалению, в Wordpress URL-адрес контента был похож на www.example.org/?p=123. Мой домен по-прежнему остается прежним, но я хочу сделать перенаправление через htaccess
, поскольку Drupal не позволит URL-адресу быть www.example.org/?p=123. Другими словами, контент не имеет того же URL-адреса, что и в Wordpress. Например, новый URL-адрес Drupal будет похож на www.example.org/content/MyNewPage
Я пробовал это в моем файле .htaccess и не работает
Redirect 301 /\?p=375 http://www.example.org/content/MyNewPage
Итак, я попробовал следующее, но он тоже не работает.
Redirect 301 /\?p\=375 http://www.example.org/content/MyNewPage
Как тест, я попробовал ниже, и это сработало.
Redirect 301 http://www.example.org http://www.google.com
Я убедился, что мое правило Redirect находится в верхней части списка в моем .htaccess, поэтому сначала будет оценено. Как это исправить?
Ответы
Ответ 1
ни Redirect, ни RedirectMatch не позволяют указать строку запроса для источника перенаправления. [Источник]
Вы должны использовать mod-rewrite для перенаправления на основе строки запроса:
RewriteCond %{QUERY_STRING} ^p=375$
RewriteRule (.*) http://www.example.org/content/MyNewPage? [R=301,L]
Ответ 2
Вы можете рассмотреть возможность использования ModRewrite в htaccess
<IfModule mod_rewrite.c>
RewriteEngine On
RewriteBase /
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteCond %{QUERY_STRING} ^p=345$ [NC]
RewriteRule index.php content/MyNewPage [NC,L,R=301]
</IfModule>
И вы также можете передать старый идентификатор страницы в новый конкатенированный URL (или, может быть, QS?):
<IfModule mod_rewrite.c>
RewriteEngine On
RewriteBase /
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteCond %{QUERY_STRING} ^p=(.*)$ [NC]
RewriteRule index.php content/MyNewPage-%1 [NC,L,R=301]
</IfModule>