首页 > 解决方案 > 我可以只在一个重定向中管理 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

标签: phpapache.htaccess

解决方案


改变这句话

# 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 重定向。


推荐阅读