Я в основном нашел здесь часть своего решения: Правило перезаписи 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?
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.