我试图在 .htaccess 中实现以下目标:
domain.com/path/to/file.php)domain.com/path/to/file.php?key=val&key2=val2)我尝试了这段代码:
RewriteEngine On
RewriteCond %{HTTP_HOST} !^domain\.com$ [NC]
RewriteRule ^(.*)$ http://domain.com/$1 [R=301,L]
Run Code Online (Sandbox Code Playgroud)
但它不尊重 http/https,也不保留已请求的路径(例如,它重定向https://www.domain.com/path/file.php到http://domain.com/file.php, 当它应该重定向到时https://domain.com/path/file.php。)
有任何想法吗?
您需要检查请求是http还是https,并重定向到正确的协议。现在,您正在将所有内容重定向到http://. 您可以使用此条件和分组:
RewriteCond %{HTTPS}:s (on:(s)|off:s)
Run Code Online (Sandbox Code Playgroud)
这使用了%{HTTPS}“on”或“off”变量,并将其与s. 然后我们匹配on:(s)或off:s。因此,如果 HTTPS 为“打开”,则(s)进行分组,我们可以使用 a 反向引用它%2,否则,如果 HTTPS 为“关闭”,则不会对任何内容进行分组并且%2为空。然后我们可以在您的重定向中使用它:
RewriteEngine On
RewriteCond %{HTTP_HOST} !^domain\.com$ [NC]
RewriteCond %{HTTPS}:s (on:(s)|off:s)
RewriteRule ^(.*)$ http%2://domain.com/$1 [R=301,L]
Run Code Online (Sandbox Code Playgroud)
至于关于不保留路径的第二件事,听起来你的规则在目录中/path,这意味着当它通过这些规则发送时它会被剥离。您需要将它们移至文档根目录。或者,如果您必须在目录中包含规则/path,则可以使用该%{REQUEST_URI}变量:
RewriteEngine On
RewriteCond %{HTTP_HOST} !^domain\.com$ [NC]
RewriteCond %{HTTPS}:s (on:(s)|off:s)
RewriteRule ^ http%2://domain.com%{REQUEST_URI} [R=301,L]
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
2044 次 |
| 最近记录: |