复杂的mod_rewrite。任何的想法?

时间:2010-07-09 13:20:20

标签: .htaccess mod-rewrite apache2

我想: - 如果使用http,则从http切换到https - 将子域重定向到索引?o =除www以外的子域 - 将子目录重定向到索引?u = user

示例: http://www.mydomain.com将被重定向到https://www.mydomain.com

http://subdomain.mydomain.com将被重定向到https://www.mydomain.com/index?o=subdomain

https://subdomain.mydomain.com将被重定向到https://www.mydomain.com/index?o=subdomain

http://subdomain.mydomain.com/user将被重定向到https://www.mydomain.com/index?o=subdomain&u=user

https://subdomain.mydomain.com/user将被重定向到https://www.mydomain.com/index?o=subdomain&u=user

mod_Rewrite是最好的吗?有什么想法吗?

提前致谢

1 个答案:

答案 0 :(得分:1)

我现在没有时间对它进行测试,但您可以尝试一下,看看它是否有效。某些事情可能会出现问题,所以如果你遇到问题,我会很乐意以后解决任何问题。另外,我认为我已经涵盖了你想做的所有事情,但如果我遗漏了一些东西,请告诉我。

RewriteEngine On

# Force redirect to HTTPS
RewriteCond %{HTTPS} !=on
RewriteRule ^.*$ https://%{HTTP_HOST}/$0 [R=301,L]

修改:我已更新下面的规则集。我考虑过你的问题,并且你不会在尝试通过TLS / SSL提供子域时遇到问题吗?除此之外,以下其中一个应该做你想要的(这次没有错误,我希望):

如果您想要内部重定向:

RewriteCond %{HTTP_HOST}    !=mydomain.com
RewriteCond %{HTTP_HOST}    !^www
RewriteCond %{REQUEST_URI}  !^/index
RewriteCond %{HTTP_HOST}%{REQUEST_URI} ^([^\.]+)[^/]*/([^/]+)?
RewriteCond %1&u=%2          ^([^&]+)(&u=.+)?
RewriteRule ^.*$ /index?o=%1%2

如果您想要外部重定向:

RewriteCond %{HTTP_HOST}    !=mydomain.com
RewriteCond %{HTTP_HOST}    !^www
RewriteCond %{REQUEST_URI}  !^/index
RewriteCond %{HTTP_HOST}%{REQUEST_URI} ^([^\.]+)[^/]*/([^/]+)?
RewriteCond %1&u=%2          ^([^&]+)(&u=.+)?
RewriteRule ^.*$ https://www.mydomain.com/index?o=%1%2 [R=301,L]