Перенаправление с использованием mod_rewrite в файле .conf не работает - PullRequest
0 голосов
/ 24 апреля 2019

В моем сервере apache мне нужно перенаправить URL-адреса в файле .conf. В моем файле http.conf, расположенном в /etc/httpd/conf, одна из строк содержит следующую конфигурацию:

Include conf.d/*.conf

В папке параметр указывает, что в /etc/httpd/conf.d у меня есть файл с именем redirect.conf, в котором есть следующий код перенаправления:

<IfModule mod_rewrite.c>
      Options +FollowSymLinks
      RewriteEngine On
      RewriteCond %{QUERY_STRING} ^PageSpeed=noscript$ [NC]
      RewriteRule ^/?abracar/?$ /abracar? [L,R=301]
      RewriteCond %{QUERY_STRING} ^PageSpeed=noscript$ [NC]
      RewriteRule ^/?presente/decoracao/teu-sorriso/?$ /presente/decoracao/teu-sorriso? [L,R=301]
      RewriteCond %{QUERY_STRING} ^p=2&PageSpeed=noscript$ [NC]
      RewriteRule ^/?acessorios/confeitaria.html/?$ /acessorios/confeitaria.html? [L,R=301]
</IfModule>

Этот код должен перенаправить URL https://example.com/abracar?PageSpeed=noscript на https://example.com/abracar, но он не работает. Если я добавлю этот код в мой файл .htaccess, он будет работать правильно, но из-за внешних факторов мне нужно поместить это перенаправление в отдельный файл .conf. Я пробовал несколько разных конфигураций, я уже много об этом исследовал, но ничего, что могло бы помочь мне решить эту проблему. Заранее спасибо!

1 Ответ

2 голосов
/ 24 апреля 2019

Полагаю, самым простым решением было бы полностью удалить строку запроса?!

Обратите внимание, что для QSD требуется Apache 2.4 или новее.

<IfModule mod_rewrite.c>
  Options +FollowSymLinks
  RewriteEngine On
  RewriteCond %{QUERY_STRING} ^PageSpeed=noscript$ [NC]
  RewriteRule ^ %{REQUEST_URI} [QSD,L,R=301]
</IfModule>

Добавленболее обобщенная и более легкая для понимания (для человека) версия:

<IfModule mod_rewrite.c>
  Options +FollowSymLinks
  RewriteEngine On
  RewriteCond %{QUERY_STRING} .+
  RewriteRule .* https://%{HTTP_HOST}%{REQUEST_URI} [QSD,L,R=301]
</IfModule>

. + - это обобщенная форма и строка запроса, которая не равна NULL.и RewriteRule теперь перечисляет все части URL, но я бы использовал ^% {REQUEST_URI} для реальной версии, потому что обе версии просто переписывают каждый URL для себя.

...