是否可以将一些查询字符串重写为 HTTPS,并将其余所有内容保留为 HTTP?

是否可以将一些查询字符串重写为 HTTPS,并将其余所有内容保留为 HTTP?

我正在将查询字符串重写为漂亮的 URI,例如:index.php?q=/en/contact变成/en/contact并且一切运行良好。

# httpd.conf

# HANDLE THE QUERY
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule ^(.*)$ index.php?q=$1 [L,QSA]

是否有可能重写单个查询以强制https并将其他所有内容强制到http?我试过了许多不同的方法通常以无限循环结束。我可以用 PHP 编写一个插件来执行此操作,但我认为在服务器配置中处理此操作会更有效。如果您有任何建议,我将不胜感激。

编辑: 为了澄清起见,我希望能够将非 SSL 重写http://example.com/index.php?q=/en/contact为启用 SSL 的https://example.com/en/contact查询,并且所有未启用 SSL 的查询/en/contact都会被写入http://example.com/...

答案1

htaccess 示例:

RewriteEngine On
RewriteCond %{HTTPS} !=on
RewriteRule ^en/contact$ https://%{SERVER_NAME}%{REQUEST_URI} [L,R]
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteCond %{HTTPS} =on
RewriteRule !^en/contact$ http://%{SERVER_NAME}%{REQUEST_URI} [L,R]
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule ^(.*)$ index.php?q=$1 [L,QSA]

http://domain/en/contact重定向https://domain/en/contact重写至 index.php?q=en/contact

http://domain/en/fo重写为 index.php?q=en/fo

https://domain/en/fo重定向http://domain/en/fo重写至 index.php?q=en/fo

https://domain/en/contact重写为 index.php?q=en/contact

相关内容