0

我试图告诉我的服务器重定向以下请求:

http://example.es
http://example.es/
http://example.es/es
http://example.es/es/
http://www.example.es
http://www.example.es/
http://www.example.es/es

到这个页面:

http://www.example.es/es/

为了做到这一点,我的 .htaccess 中有以下内容

#RewriteEngine On    # Turn on the rewriting engine
RewriteBase /
RewriteCond %{HTTP_HOST} ^(\.?example\.es(/|/es|/es/)?|www\.?example\.es(/|/es)?)$ [NC]
RewriteRule ^(.*)$ http://www.example.es/es/ [R=301,L]

问题在于它会导致无限重定向,因为所需的 URL http://www.example.com/es/也包含 HTTP_HOST 字符串。问题是我找不到准确的正则表达式来避免这个问题。

.htaccess 的其余部分如下:

php_flag register_long_arrays on
php_flag register_globals on
AddOutputFilterByType DEFLATE text/html text/plain text/xml text/css javascript application/javascript
ExpiresActive On
ExpiresByType text/css "access plus 1 years"
ExpiresByType image/png "access plus 1 years"
ExpiresByType application/javascript "access plus 1 years"

Header set Connection keep-alive

非常感谢帮助!

干杯!

4

3 回答 3

1

请记住,%{HTTP_HOST}仅匹配 URL 中的主机名。

用这个替换你的代码:

Options +FollowSymLinks -MultiViews
# Turn mod_rewrite on
RewriteEngine On

RewriteCond %{HTTP_HOST} ^(www\.)?(example\.ws)$ [NC]
RewriteRule (?!^es/)^(.*)$ http://www.%1/es/$1 [R=301,L,NC]
于 2013-08-07T19:44:42.607 回答
1

AFAIK Apache 的重写使用 PERL 正则表达式,因此支持负前瞻。您可以使用一个来避免与http://www.example.com/es/自身匹配。尝试:

^(\.?example\.com(/|/es|/es/)?|www\.?example\.com(/|/es(?!/))?)$

于 2013-08-07T18:59:53.593 回答
0

我得到这样的答案:

Options +FollowSymLinks -MultiViews
RewriteEngine On    # Turn on the rewriting engine
RewriteCond %{HTTP_HOST} ^(www\.)?(example\.es)$ [NC]
RewriteRule ^(/|/es|/es/)?$ http://www.example.es/es/$1 [R=301,L,NC]

谢谢大家的帮助!!

于 2013-08-09T08:25:59.700 回答