2016-02-09 60 views
1

OK,所以我想這樣做:mod_rewrite的基於HTTP> HTTPS重定向除了一個URL

總結:所有的URL應該https://www.domain.com/除了/ [A-f0-9] {11} /,其中(*)。應該被強制爲只有http。

我有一套舊規則(見下文),看起來不太乾淨。 我嘗試添加它們來解釋/ [a-f0-9] {11},並且它最終重定向而不是重新映射,因此我以www.domain.com/index.php/thepattern0結束了

如何清理這些規則並使其工作?

<IfModule mod_rewrite.c> 
    Options +FollowSymLinks -MultiViews -Indexes 
    RewriteEngine On 
    RewriteBase/
    #redirect to www 
    RewriteCond %{HTTP_HOST} ^domain.com [NC] 
    RewriteRule ^(.*)$ https://www.domain.com/$1 [L,R=301] 

    #redirect to https 
    RewriteCond %{HTTPS} off 
    RewriteRule (.*) https://%{HTTP_HOST}%{REQUEST_URI} [L,R=301] 

    #hide index.php 
    RedirectMatch 404 .*php\.ini 
    RewriteCond %{REQUEST_FILENAME} !-f 
    RewriteCond %{REQUEST_FILENAME} !-d 
    #RewriteRule ^(.*)$ index.php/$1 [L,QSA] 
    RewriteRule ^(.*)$ /index.php/$1 [L] 
</IfModule> 

回答

1

您可以使用:

Options +FollowSymLinks -MultiViews -Indexes 
RewriteEngine On 
RewriteBase/

#redirect to www 
RewriteCond %{HTTP_HOST} ^domain\.com$ [NC] 
RewriteRule^https://www.%{HTTP_HOST}%{REQUEST_URI} [L,R=301] 

#redirect to https 
RewriteCond %{HTTPS} off 
RewriteCond %{THE_REQUEST} !\s/+[a-f0-9]{11}[/?\s] [NC] 
RewriteRule^https://%{HTTP_HOST}%{REQUEST_URI} [L,R=301,NC] 

#redirect to http 
RewriteCond %{HTTPS} on 
RewriteCond %{THE_REQUEST} \s/+[a-f0-9]{11}[/?\s] [NC] 
RewriteRule^http://%{HTTP_HOST}%{REQUEST_URI} [L,R=301,NC] 

#hide index.php 
RewriteRule \.(?:php|ini)$ [L,R=404,NC] 

RewriteCond %{REQUEST_FILENAME} !-f 
RewriteCond %{REQUEST_FILENAME} !-d 
RewriteRule ^(.*)$ index.php/$1 [L] 
+0

難道你的建議([上OM->]第15行固定錯字) 捲曲-v -I HTTP://www.domain。 COM/abc123abc15 [...] HTTP/1.1 301永久移動 <日期:星期二,2016年2月9日8時09分37秒GMT 日期:星期二,2016年2月9日8時09分37秒GMT <服務器:Apache服務器:Apache <位置:https://www.domain.com/abc123abc15 –

+0

尾隨斜線是問題所在。檢查更新的答案,使其成爲可選項。 – anubhava

+1

酷,更新的作品(減去逃脫。在第6行) –