我正在将查询字符串重写为漂亮的 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