2017-08-08 4 views
0

を破った場合、私は、HTTPSを強制すると.htaccessを経由してWWWをストリッピングしています:/他のhtaccessで、内側のURL

 RewriteCond %{HTTP_HOST} ^www\. [NC,OR] 
     RewriteCond %{HTTPS} off 
     RewriteCond %{HTTP_HOST} ^(?:www\.)?(.+)$ [NC] 
     RewriteRule^https://%1%{REQUEST_URI} [R=301,L,NE] 

これは完璧に動作します。しかし、特定のIPから訪問者にwwwを強制する必要があります(長い話)。これを達成するために、私はした:

<If "%{REMOTE_ADDR} = '1.2.3.4' || %{REMOTE_ADDR} = '5.6.7.8' || %{REMOTE_ADDR} = '9.10.11.12' || %{REMOTE_ADDR} = '13.14.15.16.17'"> 
     #Force www and force HTTPS for internal network traffic 
     RewriteCond %{HTTP_HOST} !^www\. [NC,OR] 
     RewriteCond %{HTTPS} off 
     RewriteCond %{HTTP_HOST} ^(?:www\.)?(.+)$ [NC] 
     RewriteRule^https://www.%1%{REQUEST_URI} [R=301,L,NE] 
    </If> 
    <Else> 
     #Strip www and force HTTPS for public traffic 
     RewriteCond %{HTTP_HOST} ^www\. [NC,OR] 
     RewriteCond %{HTTPS} off 
     RewriteCond %{HTTP_HOST} ^(?:www\.)?(.+)$ [NC] 
     RewriteRule^https://%1%{REQUEST_URI} [R=301,L,NE] 
    </Else> 

これは動作します。指定されたIPの訪問者はhttps://www.example.comに強制され、他のすべてのトラフィックは標準https://example.comになります。ホームページは200 OKを返します。ただし、すべての内部ページが404 Not Foundを返すようにします。

「壊れた」.htaccess全体が以下のとおりです。 examdiffは、このバージョンと作業バージョンの唯一の違いはif/else条件があることを確認します。

このサイトでは、Digital Ocean LAMPの液滴でLaravel 5.4を実行しています。

<IfModule mod_rewrite.c> 
    <IfModule mod_negotiation.c> 
     Options -MultiViews 
    </IfModule> 

    RewriteEngine On 

    <If "%{REMOTE_ADDR} = '99.31.174.113' || %{REMOTE_ADDR} = '12.112.227.153' || %{REMOTE_ADDR} = '12.0.107.10' || %{REMOTE_ADDR} = '50.240.55.141'"> 
     #Force www and force HTTPS for internal network traffic 
     RewriteCond %{HTTP_HOST} !^www\. [NC,OR] 
     RewriteCond %{HTTPS} off 
     RewriteCond %{HTTP_HOST} ^(?:www\.)?(.+)$ [NC] 
     RewriteRule^https://www.%1%{REQUEST_URI} [R=301,L,NE] 
    </If> 
    <Else> 
     #Strip www and force HTTPS for public traffic 
     RewriteCond %{HTTP_HOST} ^www\. [NC,OR] 
     RewriteCond %{HTTPS} off 
     RewriteCond %{HTTP_HOST} ^(?:www\.)?(.+)$ [NC] 
     RewriteRule^https://%1%{REQUEST_URI} [R=301,L,NE] 
    </Else> 


    # Redirect Trailing Slashes If Not A Folder... 
    RewriteCond %{REQUEST_FILENAME} !-d 
    RewriteRule ^(.*)/$ /$1 [L,R=301] 

    # Handle Front Controller... 
    RewriteCond %{REQUEST_FILENAME} !-d 
    RewriteCond %{REQUEST_FILENAME} !-f 
    RewriteRule^index.php [L] 

    # Handle Authorization Header 
    RewriteCond %{HTTP:Authorization} . 
    RewriteRule .* - [E=HTTP_AUTHORIZATION:%{HTTP:Authorization}] 
</IfModule> 

<IfModule mod_deflate.c> 
# Compress HTML, CSS, JavaScript, Text, XML and fonts 
AddOutputFilterByType DEFLATE application/javascript 
AddOutputFilterByType DEFLATE application/rss+xml 
AddOutputFilterByType DEFLATE application/vnd.ms-fontobject 
AddOutputFilterByType DEFLATE application/x-font 
AddOutputFilterByType DEFLATE application/x-font-opentype 
AddOutputFilterByType DEFLATE application/x-font-otf 
AddOutputFilterByType DEFLATE application/x-font-truetype 
AddOutputFilterByType DEFLATE application/x-font-ttf 
AddOutputFilterByType DEFLATE application/x-javascript 
AddOutputFilterByType DEFLATE application/xhtml+xml 
AddOutputFilterByType DEFLATE application/xml 
AddOutputFilterByType DEFLATE font/opentype 
AddOutputFilterByType DEFLATE font/otf 
AddOutputFilterByType DEFLATE font/ttf 
AddOutputFilterByType DEFLATE image/svg+xml 
AddOutputFilterByType DEFLATE image/x-icon 
AddOutputFilterByType DEFLATE text/css 
AddOutputFilterByType DEFLATE text/html 
AddOutputFilterByType DEFLATE text/javascript 
AddOutputFilterByType DEFLATE text/plain 
AddOutputFilterByType DEFLATE text/xml 

# Remove browser bugs (only needed for really old browsers) 
BrowserMatch ^Mozilla/4 gzip-only-text/html 
BrowserMatch ^Mozilla/4\.0[678] no-gzip 
BrowserMatch \bMSIE !no-gzip !gzip-only-text/html 
Header append Vary User-Agent 
</IfModule> 

# BEGIN Expire headers 
<ifModule mod_expires.c> 
    ExpiresActive On 
    ExpiresDefault "access plus 5 seconds" 

    # Add correct content-type for fonts 
    AddType application/vnd.ms-fontobject .eot 
    AddType application/x-font-ttf .ttf 
    AddType application/x-font-opentype .otf 
    AddType application/x-font-woff .woff 
    AddType image/svg+xml .svg 

    # Add a far future Expires header for fonts 
    ExpiresByType application/vnd.ms-fontobject "access plus 1 year" 
    ExpiresByType application/x-font-ttf "access plus 1 year" 
    ExpiresByType application/x-font-opentype "access plus 1 year" 
    ExpiresByType application/x-font-woff "access plus 1 year" 

    ExpiresByType image/x-icon "access plus 2592000 seconds" 
    ExpiresByType image/jpeg "access plus 2592000 seconds" 
    ExpiresByType image/png "access plus 2592000 seconds" 
    ExpiresByType image/gif "access plus 2592000 seconds" 
    ExpiresByType image/svg+xml "access plus 2592000 seconds" 
    ExpiresByType application/x-font-woff "access plus 1 month" 
    ExpiresByType video/ogg "access plus 1 month" 
    ExpiresByType audio/ogg "access plus 1 month" 
    ExpiresByType video/mp4 "access plus 1 month" 
    ExpiresByType video/webm "access plus 1 month" 
    ExpiresByType text/css "access plus 7 days" 
    ExpiresByType text/javascript "access plus 7 days" 
    ExpiresByType application/javascript "access plus 7 days" 
    ExpiresByType application/x-javascript "access plus 7 days" 
    ExpiresByType text/html "access plus 600 seconds" 
    ExpiresByType application/xhtml+xml "access plus 600 seconds" 
</ifModule> 
# END Expire headers 

そしてここ/etc/apache2/sites-available/000-default.conf

<VirtualHost *:80> 
    ServerName example.com 
    ServerAlias example.com 
     ServerAdmin [email protected] 
    DocumentRoot /var/www/html/public 
    <Directory /var/www/html/public> 
     RewriteEngine On 
     RewriteBase /var/www/html/public 
     AllowOverride All 
    </Directory> 

    ErrorLog ${APACHE_LOG_DIR}/error.log 
    CustomLog ${APACHE_LOG_DIR}/access.log combined 

</VirtualHost> 

000-default-le-ssl.confdefault-ssl.confでこのサイトのエントリが似ています。

.htaccessファイルのこのセクションは実行されないことと思われる。

# Handle Front Controller... 
    RewriteCond %{REQUEST_FILENAME} !-d 
    RewriteCond %{REQUEST_FILENAME} !-f 
    RewriteRule^index.php [L] 

これは私がもし/他の条件を使用する場合、すべての内部ページが404を返すことが原因となっているだろうか? <IfModule mod_rewrite.c>ブロックの後続の行の実行を何らかの形で終了していますか?

答えて

0

問題を特定することはできませんが、<If><Else>ブロックを削除することで解決できません。結果:

#Force www and force HTTPS for internal network traffic 
RewriteCond %{REMOTE_ADDR} ^123\.45\.67\.89 [OR] 
RewriteCond %{REMOTE_ADDR} ^123\.45\.67\.90 [OR] 
RewriteCond %{REMOTE_ADDR} ^123\.45\.67\.91 
RewriteCond %{HTTP_HOST} !^www\. [NC,OR] 
RewriteCond %{HTTPS} off 
RewriteCond %{HTTP_HOST} ^(?:www\.)?(.+)$ [NC] 
RewriteRule^https://www.%1%{REQUEST_URI} [R=301,L,NE]     


#Strip www and force HTTPS for public traffic 
RewriteCond %{REMOTE_ADDR} !^123\.45\.67\.89 
RewriteCond %{REMOTE_ADDR} !^123\.45\.67\.90 
RewriteCond %{REMOTE_ADDR} !^123\.45\.67\.91  
RewriteCond %{HTTP_HOST} ^www\. [NC,OR] 
RewriteCond %{HTTPS} off 
RewriteCond %{HTTP_HOST} ^(?:www\.)?(.+)$ [NC] 
RewriteRule^https://%1%{REQUEST_URI} [R=301,L,NE]