используйте псевдоним Apache вместо RewriteRule для обслуживания HTML-страницы

Простой псевдоним в конфигурации Apache не работает -

Alias /url/path/some-deleted-page.html /url/path-modified/new-avatar-of-some-deleted-page.html 

Выдает, что страница не найдена. Однако RewriteRule работает должным образом, но отправляет статус перенаправления в браузер. Я хочу, чтобы браузер/пользователь не знал о перенаправлении. Следовательно, я хочу использовать псевдоним вместо RewriteRule. Я хочу подтвердить, можно ли использовать mod_alias для сопоставления отдельных URL-адресов.

Я также использую ProxyPassMatch, который выполняет все html-страницы как PHP-скрипт. Также добавление ProxyPass не имеет значения.

ProxyPass /url/path/some-deleted-page.html !

Пожалуйста, помогите, чтобы я мог сопоставить отдельные URL-адреса (их кучу) с псевдонимом вместо RewriteRule.


person Sharad Upadhyay    schedule 26.09.2020    source источник


Ответы (1)


Целью mod_alias является сопоставление запрошенных URL-адресов с каталогом в системе, где запущен ваш экземпляр httpd. Он ничего не возвращает браузеру (т.е. ни кода перенаправления, ничего). Все делается внутри. Следовательно, ваш клиент даже не знает, что он там.

Запрос: http://www.example.com/someurl/index.html

Конфигурация

[...]
DocumentRoot "/opt/apache/htdocs"
Alias "/someurl/" "/opt/other_path/someurl_files/"
[...]

В этом сценарии пользователи, запрашивающие любой URL-адрес, кроме /someurl/, получат файлы от /opt/apache/htdocs.

Если пользователь запрашивает /someurl/, будут использоваться файлы из /opt/other_path/someurl_files/.

В этом примере по-прежнему отсутствует определение <Directory> для защиты каталога Alias.

Вы должны прочитать: https://httpd.apache.org/docs/2.4/mod/mod_alias.html


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

Если вам нужно изменить имя файла (например, клиент запрашивает файл А, а вы отправляете обратно страницу Б), вы должны использовать RewriteRule. А чтобы скрыть тот факт, что вы изменили имя файла, используйте флаг [P].

Эта директива позволяет вам использовать регулярное выражение, но при этом использовать прокси-механизм. Так что ваш клиент знает, что произошло, так как адрес в его адресной строке не меняется.

person Nic3500    schedule 26.09.2020
comment
Благодарю за разъяснение. Пожалуйста, дайте мне знать, как мы можем этого добиться, то есть сделать что-то похожее на mod_rewrite, не отправляя никаких 301, 302, 307 и т. д. в браузер/клиент. У меня есть практический вариант использования, чтобы заставить его работать. Facebook Like/Share может быть сохранен для нового URL-адреса, если старый URL-адрес существует. Мы не хотим загромождать код фиктивными страницами только для того, чтобы удовлетворить поисковый робот FB. - person Sharad Upadhyay; 26.09.2020
comment
Вы делаете именно то, что я написал здесь. Alias "/the_url_you_want/" "/the_directory_where_the_files_are_on_your_system/". - person Nic3500; 26.09.2020
comment
Пожалуйста, дайте мне знать, как это возможно, если имя файла html изменено? some-deleted-page.html теперь называется new-avatar-of-some-deleted-page.html - person Sharad Upadhyay; 26.09.2020
comment
mod_alias сопоставляет URL-адреса с каталогами. Он не будет обрабатывать изменение имени файла. Для этого вам нужно использовать mod_rewrite. RewriteRule с флагом [P] позволит вам полностью контролировать правила переименования. А с флагом [P] он будет действовать как прокси, поэтому клиент никогда не узнает, что имя файла не соответствует запрошенной странице. - person Nic3500; 26.09.2020
comment
Я решил проблему с флагом [P]. Поскольку прокси такой же, как хост-сервер, я использовал http://localhost/url/path-modified/new-avatar-of-some-deleted-page.html в качестве назначения прокси. Это сработало. Пожалуйста, обновите ответ, чтобы я мог его принять. - person Sharad Upadhyay; 27.09.2020
comment
Неверно говорить, что mod_alias ничего не возвращает клиенту. Его можно использовать для отправки «внешних» перенаправлений на сервер. Это то, что делают директивы Redirect. - person Emmanuel; 11.12.2020