Я пытаюсь перенаправить URL без www. на www.version (пример.com на www.example.com). Я пользуюсь обычным
RewriteCond %{HTTP_HOST} ^example\.com [nc]
RewriteRule (.*) http://www.example.com/$1 [R=301,L]
Это работает на всех моих других проектах. Однако на этом конкретном сайте он заканчивается циклом перенаправления. Вот странная часть: я попытался свернуть версию без www, чтобы увидеть, какие заголовки он отправляет
curl --get http://example.com --dump-header domain.header > domain.html
. Заголовочный файл выглядел так:
HTTP/1.1 301 Moved Permanently
Date: Mon, 06 Jun 2011 14:45:16 GMT
Server: Apache/2.2.16 (Debian)
Location: http://example.com/
Vary: Accept-Encoding
Content-Length: 310
Content-Type: text/html; charset=iso-8859-1
Тем не менее, полученный HTML-файл был следующим:
<!DOCTYPE HTML PUBLIC "-//IETF//DTD HTML 2.0//EN">
<html><head>
<title>301 Moved Permanently</title>
</head><body>
<h1>Moved Permanently</h1>
<p>The document has moved <a href="http://www.example.com/">here</a>.</p>
<hr>
<address>Apache/2.2.16 (Debian) Server at example.com Port 80</address>
</body></html>
(обратите внимание на разницу адресов между файлами) Кто-нибудь знает, как это исправить (и что, черт возьми, это вызывает)? Любые другие директивы перезаписи URL работают нормально.
РЕДАКТИРОВАТЬ: журнал перезаписи содержал это: (сайт посещают многие люди, поэтому журнал перезаписи стал довольно длинным, я не уверен на 100%, если это правильная часть)
192.168.1.221 - - [06/Jun/2011:17:49:32 +0200] [example.com/sid#b797f948][rid#b7d2c1c8/initial] (3) [perdir /var/www/oup/81/] strip per-dir prefix: /var/www/oup/81/ ->
192.168.1.221 - - [06/Jun/2011:17:49:32 +0200] [example.com/sid#b797f948][rid#b7d2c1c8/initial] (3) [perdir /var/www/oup/81/] applying pattern '(.*)' to uri ''
192.168.1.221 - - [06/Jun/2011:17:49:32 +0200] [example.com/sid#b797f948][rid#b7d2c1c8/initial] (2) [perdir /var/www/oup/81/] rewrite '' -> 'http://www.example.com/'
192.168.1.221 - - [06/Jun/2011:17:49:32 +0200] [example.com/sid#b797f948][rid#b7d2c1c8/initial] (2) [perdir /var/www/oup/81/] explicitly forcing redirect with http://www.example.com/
192.168.1.221 - - [06/Jun/2011:17:49:32 +0200] [example.com/sid#b797f948][rid#b7d2c1c8/initial] (1) [perdir /var/www/oup/81/] escaping http://www.example.com/ for redirect
192.168.1.221 - - [06/Jun/2011:17:49:32 +0200] [example.com/sid#b797f948][rid#b7d2c1c8/initial] (1) [perdir /var/www/oup/81/] redirect to http://www.example.com/ [REDIRECT/301]
Строка журнала доступа (вероятно, правильная):
192.168.1.221 - - [06/Jun/2011:17:49:32 +0200] "GET / HTTP/1.1" 301 555 "-" "Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/534.24 (KHTML, like Gecko) Chrome/11.0.696.77 Safari/534.24"
Определение виртуального хоста:
<VirtualHost *:80>
ServerAdmin webmaster@localhost
ServerName example.com
ServerAlias example.com www.example.com
DocumentRoot /var/www/example/
<Directory />
Options FollowSymLinks
AllowOverride All
</Directory>
<Directory /var/www/example/>
Options Indexes FollowSymLinks MultiViews
AllowOverride All
Order allow,deny
allow from all
</Directory>
ScriptAlias /cgi-bin/ /usr/lib/cgi-bin/
<Directory "/usr/lib/cgi-bin">
AllowOverride All
Options +ExecCGI -MultiViews +SymLinksIfOwnerMatch
Order allow,deny
Allow from all
</Directory>
ErrorLog ${APACHE_LOG_DIR}/error.log
# Possible values include: debug, info, notice, warn, error, crit,
# alert, emerg.
LogLevel warn
CustomLog ${APACHE_LOG_DIR}/access.log combined
</VirtualHost>
EDIT2: хорошо, я просто понял, что если я сделаю это (подал в отставку и попытался перенаправить это без .htaccess):
//if clause determining that we're running on example.com and not www.example.com
header('HTTP/1.1 301 Moved Permanently');
header('Location: http://www.example.com' . $_SERVER['REQUEST_URI']);
header('Connection: close');
Это вызывает точно такой же цикл перенаправления. Серьезно, какого черта? У кого-нибудь есть идея, что может быть причиной этого?
источник
Ответы:
То, что кажется мне странным, это
Location: http://domain.cz/
строка заголовка, сообщаемая CURL. Вы никогда не будете перенаправлять на этот домен. Журнал перенаправления также не содержит упоминаний об этом.Каким-то образом
Location
заголовок кажется измененным после того, как modrewrite выполняет свою работу, и, поскольку вы попытались изменить заголовок также с помощью PHP,Location
заголовок, очевидно, изменяется после обработки запроса. Единственное объяснение, которое я могу придумать, это то, что вы где-то модифицируете заголовок местоположения с помощью mod_header.Вы проверили все файлы конфигурации (httpd.conf, включенные файлы .conf и файл .htaccess), если где-то нашли строку, похожую на эту:
или
источник
Помимо включения rewritelog (если у вас есть доступ к изменению httpd.conf), вы должны удалить из уравнения приложение, которое находится на этом сайте. Временно удалите / переименуйте файл index.php по умолчанию (или любую индексную страницу, обслуживающую ваше приложение), чтобы убедиться, что это не является причиной этого.
Есть много сообщений о приложениях (например, WordPress), в результате которых эти страницы перенаправления Apache по умолчанию появляются, если они неправильно настроены.
Кроме того, проверьте остальную часть конфигурации apache, чтобы увидеть, есть ли какие-либо другие инструкции по перенаправлению, которые могут конфликтовать.
источник
Можете ли вы попробовать этот альтернативный код mod_rewrite:
источник
Location: http://www.domain.com/
как часть моих заголовков так в моем случае заголовки и HTML , как показывают тот же домен тwww.domain.com
. Вы также можете вставить соответствующие строки access.log в свой вопрос выше?Можете ли вы попробовать использовать [NC] вместо [nc], может быть так просто
источник
Я надеюсь, что у вас есть доступ к серверу, добавлена строка перенаправления после того, как папка документа сайта указала
Если у вас нет доступа к серверу, добавьте эти строки в httaccess, чтобы начать / изменить часть.
Может быть, вы не добавили «RewriteEngine» перед перенаправлением.
источник
RewriteEngine on
, как я уже сказал, он работает на другом сервере должным образом, но не на этом.Пытаться:
источник
Обязательно,
Options +FollowSymLinks
если вы работаете в контексте каталога.В противном случае, если вы используете виртуальные хосты на основе имен, попробуйте:
источник
Прочитав все ответы, вы можете проверить файл de / etc / hosts ... возможно, все ваши проверки взяты с вашего компьютера. Попробуйте получить доступ из другого места.
источник
У меня есть вторая идея. Размещенный вами журнал сервера показывает адрес «192.168.1.221», который является адресом из локальной сети. Все записи журнала показывают один и тот же IP-адрес? Если это так, между вами и сервером есть прокси. Этот прокси, вероятно, использует
ProxyPassReverse
илиHeader edit
для измененияLocation
заголовка.Это обычная настройка, позволяющая обойти проблему, когда внутренний сервер помещает в
Location
заголовок свое собственное имя хоста , а не имя хоста внешнего прокси-сервера.Если прокси-сервер действительно существует, вам придется изменить конфигурацию прокси-сервера, а не конфигурацию внутреннего сервера, поскольку прокси-сервер всегда будет перезаписывать информацию.
Это означает, что все время мы искали не тот сервер: проблема с прокси-сервером!
источник
Может быть непечатаемые символы, такие как ноль в
.htaccess
файле.источник
Я полагаю, что вы пропустили знак $ после условия перезаписи. Пожалуйста, попробуй:
источник