Apache - 仅将根URL重定向到子文件夹

时间:2013-12-11 08:48:55

标签: apache .htaccess redirect

我的htaccess中有一个片段,就像这样

RewriteCond %{HTTP_HOST} ^my-domain\.de$
RewriteRule (.*) http://www.my-domain.de/$1 [R=301,L]
RewriteRule ^$ de/deutschland/example [L]

我正在尝试将my-domain.de重定向到my-domain / de / deutschland / example - 但只有根网址,所有其他网址/子文件夹必须保持不变。 不幸的是,我得到了无休止的重定向,我做错了什么?

2 个答案:

答案 0 :(得分:0)

试试这个:

RewriteCond %{HTTP_HOST} ^my-domain.de$
RewriteRule (.*) http://www.my-domain.de/$1 [R=301,L]

RewriteRule ^/?$ /de/deutschland/example [R=301,L]

请记住,所有重定向然后都会被htaccess重新处理,所以如果你有/de/deutscheland/example可能匹配的任何其他规则,那么理论上你最终会得到一个无限循环。

答案 1 :(得分:0)

@Jon的解决方案非常适合我。唯一的修改是我必须将其放在虚拟主机文件中,而不是.htaccess中,因为由于某些原因,不允许在我的htaccess文件中使用重写引擎,并且在Apache中产生了错误。

我的完整配置现在看起来像这样:

<VirtualHost *:80>
    ServerName www.example.com
    ServerAlias example.com
    Redirect / https://www.example.com/
</VirtualHost>

<VirtualHost _default_:443>
    ServerName www.example.com
    ServerAlias example.com
    DocumentRoot /var/www/example.com/public_html
    ErrorLog /var/www/example.com/error.log
    CustomLog /var/www/example.com/requests.log combined

    SSLEngine on
    SSLCertificateFile /etc/letsencrypt/live/example.com/cert.pem
    SSLCertificateKeyFile /etc/letsencrypt/live/example.com/privkey.pem
    Include /etc/letsencrypt/options-ssl-apache.conf
    SSLCertificateChainFile /etc/letsencrypt/live/example.com/chain.pem

    RewriteEngine on
    RewriteCond %{HTTP_HOST} ^example.com$
    RewriteRule (.*) https://www.example.com/$1 [R=301,L]
    RewriteRule ^/?$ /deutschland/example [R=301,L]
</VirtualHost>

我将最后一个http更改为https,我想这可能会阻止从http-> https重定向,但是我是菜鸟,所以我不确定。我所知道的是,此配置的工作方式与我想要的完全一样,并且http和https似乎都可以工作。