使用htaccess重定向到子文件夹

时间:2016-10-22 10:02:51

标签: apache .htaccess redirect mod-rewrite

我正在尝试编写.htaccess文件,将example.com或www.example.com的请求重定向到:https://example.com/game1 但我无法让它发挥作用。

我的.htaccess中有这个:

<div id="animate-area"></div>

PAGE_PATH变量不起作用,如果我使用setup2 apache更改URL但重定向失败,我也无法调用正确的URL。我收到错误:example.com重定向了你太多次(ERR_TOO_MANY_REDIRECTS)。

.htaccess的Setup2:

# ReDirect to current instance of game
RewriteEngine On
# RewriteCond %{HTTPS} != On
SetEnvIf PAGE_PATH "game1"
RewriteRule ^/?(.*) https://%{SERVER_NAME}/%{ENV:PAGE_PATH}/$1 [R,L]

如何配置我想要的行为?

2 个答案:

答案 0 :(得分:-1)

您可以使用以下规则:

RewriteEngine on

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

这将重定向:

example.com

www.example.com

https://example.com/game1/

答案 1 :(得分:-1)

试试这个:

RewriteRule ^(?>/?)(?!game[1-9]\d*(?:$|/))(.*) https://%{SERVER_NAME}/%{ENV:PAGE_PATH}/$1 [R,L]

如果网址/gameN/开头,N为任意整数,则只会重定向。它首先将斜杠放在一个只有一次的子模式中,所以,如果匹配,它就不能通过回溯和打破下一部分来“无法匹配”。下一部分是负面的前瞻性断言。

将域和https检查分开并将它们放在游戏路径重定向之前,因为它们应该是永久重定向,而游戏应该是临时的。您最好在该检查中对域进行硬编码,因为SERVER_NAMEUseCanonicalName影响,默认情况下处于关闭状态。将localhost替换为您的开发服务器域。

RewriteCond %{HTTP_HOST} !^(?:localhost|example\.com)$
RewriteRule .* https://example.com/$0 [L,R=301]

RewriteCond %{HTTPS} ^off$
RewriteRule .* https//%{SERVER_NAME}/$0 [L,R=301]