Apache: Откройте то же самое. php с любым URN (abc.com/ ), но сохраните URL

Я в основном нашел здесь часть своего решения: Правило перезаписи Apache и оставить URL неизменным?

но я хочу сделать больше.

Я хочу открыть " template.php ", который появляется при любом введенном URN. Итак, если я открою abc.com/blabla, откроется шаблон, а URL-адрес останется abc.com/blabla. Если я введу abc.com/lalala, откроется шаблон, а URL-адрес останется abc.com/lalala.

Я думаю, что это то, что я хочу:

RewriteRule ^/$       /template.php

Кроме того, я хочу, чтобы мой основной сайт abc.com открывал index.php, а также использовал перезапись для https, что мне нравится:

    RewriteEngine   On
    RewriteCond     %{HTTPS} !=on
    RewriteRule     ^/?(.*) https://%{SERVER_NAME}/$1 [R,L]

Как добиться того и другого в одном конфиге? Разве часть https не портит URN?

0
задан 30 April 2018 в 17:04
1 ответ
 RewriteRule ^ / $ /template.php
 

Предполагая, что эта директива находится в контексте сервера или виртуального хоста (то есть не в контексте каталога или .htaccess ), тогда это будет соответствовать только запросам для корня документа (например, / ) и игнорировать / blabla и / lalala .

Для соответствия <что угодно > , кроме index.php (или пустого URL-пути, предполагая, что index.php установлен как DirectoryIndex), тогда вместо этого выполните что-то вроде следующего:

 RewriteRule ^/(index\.php|template\.php)?$ - [L]
 RewriteRule ^ /template.php [L]

Первое правило останавливает любую дальнейшую обработку, если запрашивается / или /index.php или /template.php , что позволяет вашему основному сайту (т. Е. ] index.php ) для доступа и предотвращает цикл перезаписи.

Второе правило перезаписывает все остальные URL-адреса (независимо от того, отображаются ли они непосредственно на ресурсы файловой системы или нет) в /template.php .

Это необычно, что вы не хотите, чтобы стат c ресурсы (изображения, CSS, JS и т. д.), которые следует исключить из этой перезаписи, но вы подтвердили это в комментариях.

 RewriteEngine On
RewriteCond% {HTTPS}! = On
RewriteRule ^ /? (. *) Https: //% {SERVER_NAME} / $ 1 [R, L]
 

Поскольку вы находитесь в конфигурации основного сервера (т.е. не .htaccess ), вам в любом случае не следует использовать mod_rewrite для перенаправления HTTP на HTTPS. У вас должен быть простой mod_alias Redirect в неканоническом контейнере .

Не портит ли часть https часть URN?

Нет. (Чтобы ответить на этот конкретный вопрос - если вы использовали mod_rewrite.)

Это, конечно, предполагает, что у вас есть директивы в правильном порядке. Сначала должно появиться внешнее перенаправление с HTTP на HTTPS.

0
ответ дан 24 November 2019 в 02:44

Теги

Похожие вопросы