.htaccess가 www-prefixed 페이지로 올바르게 리디렉션되지 않습니다 나는 평소 사용 RewriteCond %{HTTP_HOST} ^example\.com [nc] RewriteRule (.*)

www없이 URL을 리디렉션하려고합니다. www.version (example.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이보고 한 헤더 행 이 이상하게 들리는 것은 저 입니다. 해당 도메인으로 리디렉션하지 마십시오. 리디렉션 로그에도 이에 대한 언급이 없습니다.

어떻게 든 Locationmodrewrite가 헤더를 변경 한 후 헤더가 변경 된 것처럼 보이며 PHP로 헤더를 변경하려고 시도했기 때문에Location 요청이 처리 된 후 헤더가 변경되었습니다. 내가 생각할 수있는 유일한 설명은 mod_header를 사용하여 위치 헤더를 수정하고 있다는 것입니다.

다음과 비슷한 줄을 찾으면 모든 구성 파일 (httpd.conf, 포함 된 .conf 파일 및 .htaccess 파일)을 확인 했습니까?

Header set Location (...)

또는

Header edit Location (...)


답변

rewritelog를 활성화하는 것 외에 (httpd.conf를 변경할 수있는 경우)이 사이트에있는 응용 프로그램을 방정식에서 제거해야합니다. 기본 index.php (또는 앱을 제공하는 인덱스 페이지)를 일시적으로 제거 / 이름 바꾸기하여 이로 인해 발생하지 않는지 확인하십시오.

이러한 아파치 기본 리디렉션 페이지가 잘못 구성된 경우 응용 프로그램 (예 : 워드 프레스)에 대한 많은 보고서가 있습니다.

또한 나머지 아파치 구성을 확인하여 충돌 할 수있는 다른 ‘리디렉션’지침이 있는지 확인하십시오.


답변

이 대체 mod_rewrite 코드를 사용해 볼 수 있습니까?

RewriteCond %{HTTP_HOST} !^www\. [NC]
RewriteRule ^ http://www.%{HTTP_HOST}%{REQUEST_URI} [R=301,L]


답변

[nc] 대신 [NC]를 사용하려고하면 너무 간단 할 수 있습니다


답변

서버 액세스 권한이 있기를 바랍니다. 사이트 문서 폴더가 지정된 후 리디렉션 라인을 추가했습니다.

RewriteEngine on
RewriteCond %{HTTP_HOST} ^domain\.cz [NC]
RewriteRule ^/(.*) http://www.domain.cz/$1 [L,R=301]

서버에 대한 액세스 권한이 없으면 httaccess에서 해당 줄을 추가하여 부분을 시작 / 변경하십시오.

리디렉션 전에 “RewriteEngine on”을 추가하지 않았을 수 있습니다.


답변

시험:

RewriteCond %{HTTP_HOST} ^domain.cz [NC]
RewriteRule (.*) http://www.domain.cz/$1 [R=301,L]


답변

Options +FollowSymLinks디렉토리 컨텍스트 내에서 작업하는 경우 반드시 있어야 합니다.

그렇지 않으면 이름 기반 가상 호스트를 사용하는 경우 다음을 시도하십시오.

<VirtualHost *:80>
  ServerName domain.cz
  Redirect / http://www.domain.cz/
</VirtualHost>

<VirtualHost *:80>
  ServerName www.domain.cz
  # whatever else
</VirtualHost>