У меня есть файл htaccess, который начинается так:
RewriteEngine On
RewriteBase /
RewriteCond %{QUERY_STRING} where-can-i-find-information-about-homer-training
RewriteRule ^(.*)$ http://usersupport.homerenergy.com/customer/en/portal/articles/2186858-where-can-i-find-information-about-homer-training-? [R=301,L]
RewriteCond %{QUERY_STRING} is-homer-pro-conservative-in-its-predictions
RewriteRule ^(.*)$ http://usersupport.homerenergy.com/customer/en/portal/articles/2186859-is-homer-pro-conservative-in-its-predictions-? [R=301,L]
...
который продолжается еще 308 аналогичных правил. Как видите, это предназначено для перенаправления списка статей с одного сайта на другой, где соответствующий элемент - это имя статьи в части запроса строки GET.
Если я просто добавлю одну или две пары RewriteCond
/RewriteRule
s в файле, это работает. Но когда я использую весь файл, я получаю внутреннюю ошибку сервера 500.
Очевидно, одно из правил вызывает ошибку, но, просматривая файл, я не вижу, что это такое.
Посмотрев журнал ошибок, я вижу такое сообщение:
/var/www/html/.htaccess: RewriteCond: bad argument line '%{QUERY_STRING}'
что мне мало что говорит.
Как узнать, какое правило вызывает эту ошибку?
Я считаю, что вам нужно поставить свои тестовые значения следующим образом:
https://httpd.apache.org/docs/trunk/rewrite/remapping.html (раздел: Переписать строку запроса)
RewriteCond "%{QUERY_STRING}" "where-can-i-find-information-about-homer-training"
RewriteRule "^(.*)$" "http://usersupport.homerenergy.com/customer/en/portal/articles/2186858-where-can-i-find-information-about-homer-training-?" [R=301,L]
Думаю, у вас может быть пробел в одном из ваших значений. Попробуйте начать, может это исправить. Я обычно не использую "для перезаписи", но я также обычно не использую пробелы, ну, я имею в виду, я никогда не использую пробелы в этих типах имен.
В стороне,
^(.*)$
действительно не имеет смысла, потому что
(.*)
уже означает: все это. Я считаю, что начало и конец всего немного излишне.
Возможная альтернативная ошибка заключается в том, что вы просто пропустили разрыв строки в серии 500, вы можете дважды проверить это, используя представление номера строки в редакторе кода.