2017-10-04 6 views
1

をリダイレクト:PRODのURLからアクセスした場合にのみ2つのディレクトリ以外のすべての.htaccessのルール - あまりにも多くの私はhtaccessのファイルを使用して2つのことを達成しようとしている

  1. フォースHTTPS、(DEVにはHTTPS)
  2. は、index.phpの

内の任意の存在しないURLをリダイレクトし、これは私が持っているものです。

RewriteEngine On 
# Redirect all http to https 
RewriteCond %{HTTPS} !=on 
RewriteCond %{HTTP_HOST} myserver\.com$ [NC] 
RewriteRule ^(api|images)($|/) - [L] 
RewriteRule^https://%{HTTP_HOST}%{REQUEST_URI} [L,R=301] 
# The following rule tells Apache that if the requested filename 
# exists, simply serve it. 
RewriteCond %{REQUEST_FILENAME} -s [OR] 
RewriteCond %{REQUEST_FILENAME} -l [OR] 
RewriteCond %{REQUEST_FILENAME} -d 
RewriteRule ^.*$ - [NC,L] 
# The following rewrites all other queries to index.php. The 
# condition ensures that if you are using Apache aliases to do 
# mass virtual hosting, the base path will be prepended to 
# allow proper resolution of the index.php file; it will work 
# in non-aliased environments as well, providing a safe, one-size 
# fits all solution. 
RewriteCond %{REQUEST_URI}::$1 ^(/.+)(.+)::\2$ 
RewriteRule ^(.*) - [E=BASE:%1] 
RewriteRule ^(.*)$ %{ENV:BASE}index.php [NC,L] 

私が追加します最初のビット(httpsを強制)私は "あまりにも多くのリダイレクト"エラーを取得します。どんなアイデアなの?

答えて

1

RewriteCond次のRewriteRuleにのみ適用されます。 http->httpsのリダイレクトルールは無条件であり、リダイレクトループが発生します。

は、このようにそれを持っている:

RewriteEngine On 

# Redirect all http to https 
RewriteCond %{HTTPS} !=on 
RewriteCond %{HTTP_HOST} myserver\.com$ [NC] 
RewriteCond %{THE_REQUEST} !\s/+(?:api|images)[/?\s] [NC] 
RewriteRule^https://%{HTTP_HOST}%{REQUEST_URI} [L,R=301,NE] 

# The following rule tells Apache that if the requested filename 
# exists, simply serve it. 

RewriteCond %{REQUEST_FILENAME} -s [OR] 
RewriteCond %{REQUEST_FILENAME} -l [OR] 
RewriteCond %{REQUEST_FILENAME} -d 
RewriteRule^- [L] 

# The following rewrites all other queries to index.php. The 
# condition ensures that if you are using Apache aliases to do 
# mass virtual hosting, the base path will be prepended to 
# allow proper resolution of the index.php file; it will work 
# in non-aliased environments as well, providing a safe, one-size 
# fits all solution. 
RewriteCond %{REQUEST_URI}::$1 ^(/.+)(.+)::\2$ 
RewriteRule ^(.*) - [E=BASE:%1] 

RewriteRule^%{ENV:BASE}index.php [L] 
+1

は説明をありがとう!それは完璧に働いた。 – LobsterMan

0

私はこの部分がより多くのようになるはずと信じて:

RewriteRule ^(api|images)($|/) - [L] 
RewriteCond %{HTTPS} !=on 
RewriteCond %{HTTP_HOST} myserver\.com$ [NC] 
RewriteRule^https://%{HTTP_HOST}%{REQUEST_URI} [L,R=301] 
関連する問題