.htaccess https 重定向最佳方法

.htaccess https 重定向最佳方法

我搜索了其他人发布的所有重定向,但还是无法找到我的问题的答案。

我有一个拥有超过 3000 个页面的网站,我们在 Google 中遇到了重复问题。

我们希望父目录中除了 contact.php 和 login.php 页面之外的所有内容都保留为 http。

然后我们有 3 个必须保护的文件夹。管理员、客户、顾客

我曾尝试在每个文件夹的单独 .htaccess 文件中使用以下代码,但尝试时仍出现冲突,我仍在尝试为主目录寻找一个好的解决方案。

RewriteEngine On 
RewriteCond %{SERVER_PORT} 80
RewriteCond %{REQUEST_URI} admin
RewriteRule ^(.*)$ https://www.website.com/$1 [R,L]

任何帮助将不胜感激。

答案1

不要尝试逐个文件地控制协议。您需要的是两个不同的目录树,一个用于 http,另一个用于 https,尽管后者可能是前者的子目录。一旦您有了适当的结构,您就可以将对安全页面或目录的任何 http 调用重定向到 https 树中的适当位置。

答案2

我将使用黑名单/白名单的想法,分成两个独立的指令块。

对于所有 HTTP-80 请求,匹配那些必须是 HTTPS 的目录或路径并重定向它们,其余的将通过并正确提供。此代码假定它们是顶级目录。

对于 HTTPS-443 请求,请执行相反的操作。如果请求与允许列表不匹配,则重定向回 HTTP

RewriteEngine On

# redirect to https where appropriate
RewriteCond %{SERVER_PORT} 80
RewriteCond %{REQUEST_URI} ^/(admin|clients|customers) [OR]
RewriteCond %{SCRIPT_FILENAME} (contact.php|login.php)
RewriteRule ^(.*)$ https://test.dev/$1 [R=301,L]

# handle SSL requests, flick anything that doesn't match allowed back to non-SSL 
RewriteCond %{SERVER_PORT} 443
RewriteCond %{REQUEST_URI} !^/(admin|clients|customers)
RewriteCond %{SCRIPT_FILENAME} !(contact.php|login.php)
RewriteRule ^(.*)$ http://test.dev/$1 [R=301,L]

相关内容