1

旧站点:
www.example.com(默认)

新站点:
example.com(默认)
和新语言..
es.example.com

目前在旧网站上:
www.example.com/this-page.php

想要在新网站上(干净的网址):
example.com/this-page
es.example.com/esta-pagina

到目前为止,我有这个:

RewriteCond %{HTTPS} !=on
RewriteCond %{HTTP_HOST} ^www\.(.+)$ [NC]
RewriteRule ^ http://%1%{REQUEST_URI} [R=301,L]

RewriteRule ^this-page/?$ this-page\.php?lang=$1
RewriteRule ^esta-pagina/?$ this-page\.php?lang=$1


** $_GET['lang'] 是在内部生成的,具体取决于是否点击了 example.com 或 es.example.com。

问题:

我怎样才能添加类似这样的重定向:
Redirect 301 /this-page.php http://example.com/this-page
...这不会导致无限循环?

4

2 回答 2

2

我怎样才能添加类似这样的重定向:
重定向 301 /this-page.php http://example.com/this-page
...that does not cause an无限循环?

您需要匹配实际请求而不是 URI。URI 将随着重写引擎循环规则而改变。

RewriteCond %{THE_REQUEST} ^(GET|HEAD|POST)\ /this-page\.php(\?|\ )
RewriteRule ^ /this-page [L,R=301]
于 2012-11-14T06:09:04.553 回答
1

另外值得注意的是,如果您使用像 CloudFlare 这样的 CDN,%{HTTPS} 检查会给您带来无限循环错误。如果您是 CloudFlare 用户,则需要将 RewriteCond %{HTTPS} !=on 替换为:

RewriteCond %{HTTP:X-Forwarded-Proto} =http
于 2014-11-13T23:33:26.087 回答