Apache:使用任意 URN 打开相同的 .php 文件(abc.com/)但保留 URL

Apache:使用任意 URN 打开相同的 .php 文件(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 部分吗?

答案1

RewriteRule ^/$       /template.php

假设该指令位于服务器或者虚拟主机上下文(即不是一个目录.htaccess上下文),那么这将只匹配对文档根目录(即/)的请求,而忽略/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 重定向。您应该Redirect在非规范<VirtualHost *:80>容器中有一个简单的 mod_alias。

https 部分不会混淆 URN 部分吗?

不。(回答这个具体问题 - 如果您使用 mod_rewrite。)

当然,这是假设您按照正确的顺序输入了指令。从 HTTP 到 HTTPS 的外部重定向应该首先出现。

相关内容