2017-02-11 68 views
0

我有一个.htaccess文件见下文的.htaccess重定向,除了一个特定的请求

Options +FollowSymLinks +ExecCGI 

<IfModule mod_rewrite.c> 

#Every www request to non-www 
RewriteEngine On  
RewriteCond %{HTTP_HOST} ^www\.(.*)$ [NC] 
RewriteRule ^(.*)$ http://%1%{REQUEST_URI} [R=301,QSA,NC,L] 

#every http request in amdinistrator folder redirect to https 
RewriteCond %{HTTPS} off 
RewriteCond %{REQUEST_URI} ^/administrator 
RewriteRule ^(.*)$ https://%{HTTP_HOST}/$1 [R=301,L] 

#every https request except ftp and one specific request redirect to http 
RewriteCond %{HTTPS} =on 
RewriteCond %{REQUEST_URI} !^/ftp 
RewriteCond %{REQUEST_URI} !=/preview/index.php?request_type=preview_engime 
RewriteRule ^(.*)$ http://%{HTTP_HOST}/$1 [L,R=301] 

#redirect which request contains PUBLIC_AJAX_ENGIME 
RewriteRule ^(.*)PUBLIC_AJAX_ENGIME(.*)$ index.php?request_type=ajax_engime [L] 

#files and directories 
RewriteCond %{REQUEST_FILENAME} !-d 
RewriteCond %{REQUEST_FILENAME} !-f 
RewriteRule . index.php [L] 

</IfModule> 

我不想在这种情况下重定向:

https://somewebsite.domain/preview/index.php?request_type=preview_engime

但这里系统重定向

http://somewebsite.domain/index.php?request_type=preview_engime

an我不明白为什么。

谢谢! FF

回答

0

这是因为你的url包含查询字符串。您无法使用REQUEST_URI变量与QueryString匹配。您需要匹配THE_REQUEST变量。与此更换你的RewriteCond:

RewriteCond %{THE_REQUEST} !/index\.php\?request_type=preview_engime [NC] 
+0

这几乎是好...现在请求被重定向到这里: HTTP:// somewebsite.domain /预览/ index.php的request_type = preview_engime 但我需要HTTPS在这种情况下。 – Fferlen

相关问题