php - 我可以只在一个重定向中管理 https、www 和没有 .php 重定向吗?
问题描述
我正在为一个需要所有页面都具有 https 和 www 的网站进行重定向,而且还要从任何 .php 文件中删除扩展名。
我只能在一个重定向中管理 https + www,但我不确定是否可以在同一个句子中包含 .php 删除行并将所有内容组合在一个重定向中。
#HTTPS + WWW
RewriteCond %{HTTP_HOST} ^example.com$
RewriteRule (.*) https://www.example.com/$1 [R=301,L]
# To externally redirect /dir/file.php to /dir/file
RewriteCond %{THE_REQUEST} \s/+(.+?)\.php[\s?] [NC]
RewriteRule ^ /%1 [R=301,NE,L]
## To internally rewrite /dir/file to /dir/file.php
RewriteCond %{REQUEST_FILENAME} !-d
RewriteCond %{REQUEST_FILENAME}.php -f
RewriteRule ^(.+?)/?$ $1.php [L]
现在,任何以“.php”结尾的内部文件都必须经过两个不同的重定向才能满足要求。
http://example.com/file.php > https://www.example.com/file.php > https://www.example.com/file
有没有办法让它成为一个重定向?这个想法是它仍然适用于域内的任何其他内容,但如果文件以 .php 结尾,它会被重定向到非 .php
解决方案
改变这句话
# To externally redirect /dir/file.php to /dir/file
RewriteCond %{THE_REQUEST} \s/+(.+?)\.php[\s?] [NC]
RewriteRule ^ /%1 [R=301,NE,L]
至
# To externally redirect /dir/file.php to /dir/file
RewriteCond %{THE_REQUEST} \s/+(.+?)\.php[\s?] [NC]
RewriteRule https://www.example.com/%1 [R=301,NE,L]
并将其添加到顶部(在 https 重定向之前)就可以了。这样,如果文件以“.php”结尾,它会自动重定向到 https 和 www,因此其余条件不适用。否则,它只需要下面的 https www 重定向。
推荐阅读
- r - 如何在 R (ggplot2) 中创建多个变量的堆积柱图
- android - 将项目设置为显示在回收站视图旁边一直显示在顶部
- web-scraping - 如何使用 IMPORTXML 导入隐藏的 div 标签?
- r - 在 R & Match Colors 中为传单图添加图例
- javascript - 有没有最快的方法在节点 js 中运行 shell 命令?
- mysql - 如何使用 GUI 工具安全地连接到 GKE 中的数据库?
- php - 如何优化和清理这些循环?
- vue.js - 如何创建使用带有管道分隔符(vue-i18n)的区域设置消息的链接消息?
- javascript - 如何解决错误尝试导入错误:“react-hook-form”不包含默认导出(导入为“useForm”)。使用反应 js
- modelica - 根据参数除以零