В основном я нашел здесь часть своего решения: Правило перезаписи 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
context), то это будет соответствовать запросам только для корня документа (т.е. /
) и игнорировать /blabla
и /lalala
.
Чтобы соответствовать <anything>
, Кроме 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
.
Необычно то, что вы не хотите, чтобы статические ресурсы (изображения, CSS, JS и т. Д.) Были исключены из этой перезаписи, но вы подтвердили это в комментариях.
RewriteEngine On RewriteCond %{HTTPS} !=on RewriteRule ^/?(.*) https://%{SERVER_NAME}/$1 [R,L]
Поскольку вы находитесь в конфигурации основного сервера (т.е. не .htaccess
), то вам не следует использовать mod_rewrite для перенаправления HTTP на HTTPS. У вас должен быть простой mod_alias Redirect
в неканонических <VirtualHost *:80>
контейнер.
Разве часть https не портит часть URN?
Нет. (Чтобы ответить на этот конкретный вопрос - если вы использовали mod_rewrite.)
Это, конечно, при условии, что у вас есть директивы в правильном порядке. Сначала должно появиться внешнее перенаправление с HTTP на HTTPS.