我试图告诉我的服务器重定向以下请求:
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
非常感谢帮助!
干杯!
答案 0 :(得分:1)
AFAIK Apache的重写使用PERL正则表达式,因此支持负向前瞻。您可以使用一个来避免将http://www.example.com/es/
与自身匹配。尝试:
^(\.?example\.com(/|/es|/es/)?|www\.?example\.com(/|/es(?!/))?)$
答案 1 :(得分:1)
请记住,%{HTTP_HOST}
仅匹配网址中的主机名。
用以下代码替换您的代码:
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]
答案 2 :(得分: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]
谢谢大家的帮助!!