Исправьте RegEx, чтобы избежать бесконечного цикла, используя RewriteRule для перенаправления 301
Я пытаюсь заставить мой сервер перенаправить следующие запросы:
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
Помощь очень очень ценится!
Ура!
3 ответа
AFAIK При переписывании Apache используется регулярное выражение PERL, поэтому поддерживаются негативные запросы. Вы можете использовать один, чтобы избежать соответствия http://www.example.com/es/
к себе. Пытаться:
^(\.?example\.com(/|/es|/es/)?|www\.?example\.com(/|/es(?!/))?)$
Помни что %{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]
Я получаю ответ, как это:
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]
Спасибо за вашу помощь!!