我搜索了其他人发布的所有重定向,但还是无法找到我的问题的答案。
我有一个拥有超过 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]