আমি www ছাড়াই একটি url পুনঃনির্দেশের চেষ্টা করছি। www.version (উদাহরণ.কম থেকে www.example.com)) আমি স্বাভাবিক ব্যবহার করি
RewriteCond %{HTTP_HOST} ^example\.com [nc]
RewriteRule (.*) http://www.example.com/$1 [R=301,L]
এটি আমার অন্যান্য সমস্ত প্রকল্পে কাজ করে। তবে এই নির্দিষ্ট সাইটে, এটি একটি পুনর্নির্দেশ লুপ দিয়ে শেষ হয়। এখানে একটি অদ্ভুত অংশ: আমি নন-ডাব্লু ভার্সনটি কার্ল করার চেষ্টা করেছিলাম এটি কী শিরোনাম ব্যবহার করে প্রেরণ করে তা দেখার জন্য
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
তবে, ফলস্বরূপ এইচটিএমএল ফাইলটি এটি ছিল:
<!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>
(ফাইলগুলির মধ্যে ঠিকানার পার্থক্যটি দ্রষ্টব্য) কীভাবে কেউ কীভাবে এটি ঠিক করতে জানেন (এবং কী কারণে এটি ঘটছে)? অন্য যে কোনও ইউআরএল পুনর্লিখনের নির্দেশিকা কার্যকর হয়।
সম্পাদনা: পুনর্লিখনের লগটিতে এটি অন্তর্ভুক্ত রয়েছে: (সাইটটি অনেক লোকের দ্বারা অ্যাক্সেস করা হয় যাতে পুনর্লিখনের লগটি বেশ দীর্ঘ হয়ে যায়, আমি এটি সঠিক অংশ কিনা 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>
সম্পাদনা 2: ঠিক আছে, আমি ঠিক বুঝতে পেরেছি যে আমি যদি এটি করি (পদত্যাগ করে এবং .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');
এটি ঠিক একই পুনর্নির্দেশ লুপের কারণ হয় । সিরিয়াসলি, কি রে? কারও কি এমন ধারণা আছে যা সম্ভবত এটির কারণ হতে পারে?