.htaccess重定向行为

时间:2015-03-18 16:24:39

标签: apache .htaccess redirect

我有一个.htaccess文件,用户将用户重定向到https://,如果没有指定其他内容,则添加/ de / index。

RewriteEngine on
RewriteRule ^(hotelaccess)($|/) - [L]
RewriteBase /
RewriteCond %{REQUEST_FILENAME} -f [OR]
RewriteCond %{REQUEST_FILENAME} -d
RewriteRule ^ - [L]
RewriteCond %{SERVER_PORT}   !^443$
RewriteRule  (.*)  https://%{HTTP_HOST}/de/index  [L] 
RewriteCond %{HTTP_HOST} !^www\.mypage\.de
RewriteRule (.*) http://www.mypage.de/de/index [R=301,L]
RewriteRule ^([^/]+)/([^/]+)/?$ index.php?lang=$1&page=$2 [L,QSA]

但现在如果我输入https://www.mypage.de,它会被重定向到https://www.mypage.de/index?为什么这样,我需要添加什么来解决这个问题? 澄清:如果使用和不使用www以及http://和https://(也包含或不使用www)输入,默认网址应始终为https://www.mypage.de/de/index

1 个答案:

答案 0 :(得分:1)

您需要先重定向,然后重写。您还可以将两个重定向组合成一个规则:

RewriteEngine on
RewriteBase /

RewriteCond %{SERVER_PORT} !^443$ [OR]
RewriteCond %{HTTP_HOST}   ^mypage\.de$ [NC]
RewriteRule ^(.*)$ https://www.mypage.de/$1 [R,L] 

# for no URI
RewriteRule ^$ /de/index [L]

# for hotelaccess
RewriteRule ^hotelaccess - [L]

# for everything else
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule ^([^/]+)/([^/]+)/?$ index.php?lang=$1&page=$2 [L,QSA]