Apache 2.4 RewriteRule работает только с доменным именем - PullRequest
0 голосов
/ 09 марта 2020

Я перевожу старый сайт с apache 2.2 на 2.4

У меня есть vhost.conf файл, который содержит следующую переписывающую строку:

RewriteRule ^/news/[0-9]{4}/[A-za-z]{3}/([0-9a-zA-Z-]*)/([0-9]{4})([0-9]{6})/?$ "/news/article.cfm?article_id=$3&urltitle=$1&clk=$2" [NE,L]

Итак, я ' я пытаюсь превратить этот URL: https://example.com/news/2016/Feb/Article-Title/0025012345

в это: https://example.com/news/article.cfm?article_id=012345&urltitle=Article-Title&clk=0025

В зависимости от того, что я положил во 2-й части RewriteRule я получаю следующее:

"https://example.com/news/article.cfm?article_id=$3&urltitle=$1&clk=$2" это работает нормально, но я не хочу указывать имя хоста, поскольку оно используется на серверах dev / staging / live, поэтому URL-адреса меняются

"/news/article.cfm?article_id=$3&urltitle=$1&clk=$2" это выдает 404, которое появляется в access_log

"news/article.cfm?article_id=$3&urltitle=$1&clk=$2", это выдает 503, которое появляется в access_log

Так что я знаю, что я правильно идентифицируя URL-адрес в первой части правила и выбирая правильные компоненты с помощью моего регулярного выражения, поскольку указание полного имени домена показывает правильную манипуляцию URL-адресом.

Я полностью не могу выполнить относительное перенаправление, и Я уверен, что это правило работает в Apache 2.2

Я использую следующее программное обеспечение:

CentOS Linux r выпуск 7.7.1908 (Core)

Версия сервера: Apache / 2.4.6 (CentOS) Сервер построен: 8 августа 2019 г. 11: 41: 18

1 Ответ

0 голосов
/ 09 марта 2020

Обвиосулы, ответ в руководстве ... которое я должен был прочитать более подробно:

https://httpd.apache.org/docs/2.4/rewrite/remapping.html#old -в новой

Предположим, мы недавно переименовали страницу foo. html в bar. html и теперь хотим предоставить старый URL для обратной совместимости. Однако мы хотим, чтобы пользователи старого URL-адреса даже не распознавали, что страницы были переименованы, то есть мы не хотим, чтобы адрес изменялся в их браузере.

RewriteEngine  on
RewriteRule    "^/foo\.html$"  "/bar.html" [PT]

Ключевым моментом здесь является [PT], который исправил это для меня:

RewriteRule ^/news/[0-9]{4}/[A-za-z]{3}/([0-9a-zA-Z-]*)/([0-9]{4})([0-9]{6})/?$ "/news/article.cfm?article_id=$3&urltitle=$1&clk=$2" [PT,NE,L]
...