मैं 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 की परिभाषा:
<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: ठीक है, मुझे अभी पता चला है कि अगर मैं ऐसा करता हूं (इस्तीफा दे दिया है और इसे बिना रीडायरेक्ट करने का प्रयास किया है।
//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');
यह कारण बनता है ठीक उसी रीडायरेक्ट लूप। गंभीरता से, क्या नरक है? क्या किसी को अंदाजा है कि संभवतः इसका क्या कारण हो सकता है?