我的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 - 但只有根网址,所有其他网址/子文件夹必须保持不变。 不幸的是,我得到了无休止的重定向,我做错了什么?
答案 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似乎都可以工作。