.htaccess সঠিকভাবে www-উপসর্গযুক্ত পৃষ্ঠায় পুনর্নির্দেশ করে না


9

আমি 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');

এটি ঠিক একই পুনর্নির্দেশ লুপের কারণ হয় । সিরিয়াসলি, কি রে? কারও কি এমন ধারণা আছে যা সম্ভবত এটির কারণ হতে পারে?


আপনি নিজেই আপাচি সংকলন করেছেন, নাকি? অবস্থান শিরোনামের পক্ষে পৃষ্ঠাটিতে যা আছে তা থেকে পৃথক হওয়া অসম্ভব, কারণ তারা এই ক্ষেত্রে একই পরিবর্তনশীল থেকে নেওয়া হয়েছে, তাই এটি বেশ বিচিত্র। আমি ধরে নিলাম যে অনুরোধগুলি সরাসরি অ্যাপাচে পৌঁছেছে, ঠিক আছে, অন্য কোনও সার্ভার অভ্যন্তরে বসে নেই?
টিম স্টোন

আমি নিজেই অ্যাপাচি সংকলন করি নি এবং এর মাঝে অন্য কোনও সার্ভার নেই।

সম্ভবত আপনার এনএস সার্ভারটি সঠিকভাবে কনফিগার করা হয়নি
ভিনিমাস

4
সার্ভারএলিয়াস এন্ট্রিতে সার্ভারের নামটি পুনরাবৃত্তি করার প্রয়োজন নেই।
ক্রিস

আপনি এখানে ফাইলের সমস্ত সামগ্রী রাখতে পারেন
পূর্বাবস্থায়

উত্তর:


2

যা আমাকে বিজোড় হিসাবে আঘাত করে তা হ'ল Location: http://domain.cz/সিআরএল দ্বারা রিপোর্ট করা শিরোনাম লাইন। আপনি কখনই সেই ডোমেনে পুনর্নির্দেশ করবেন না। পুনঃনির্দেশ লগতে এর কোনও উল্লেখ নেই।

কোনওভাবেই Locationশিরোনামটি পরিবর্তিত হবে বলে মনে হচ্ছে মডিউরাইটের স্টাফগুলি করার পরে এবং আপনি যেহেতু পিএইচপি দিয়ে শিরোনামটি পরিবর্তন করার চেষ্টা করেছেন, Locationঅনুরোধটি প্রক্রিয়া করার পরে শিরোনামটি দৃশ্যত পরিবর্তিত হবে। আমি কেবলমাত্র ব্যাখ্যাটি ভাবতে পারি তা হল আপনি কোথাও মোড_হেডার দিয়ে লোকেশন শিরোনামটি সংশোধন করছেন।

আপনি যদি কোথাও এর অনুরূপ একটি লাইন খুঁজে পান তবে আপনি সমস্ত কনফিগারেশন ফাইল (httpd.conf, অন্তর্ভুক্ত .conf ফাইল এবং .htaccess ফাইল) পরীক্ষা করেছেন:

Header set Location (...)

অথবা

Header edit Location (...)

আমি এর মতো কিছু পাইনি।

2
আপনি কি সরাসরি অ্যাপাচি-তে সংযোগ করছেন, বা শিরোনাম বদলে যেতে পারে এমন কিছু ক্যাচিং বা প্রক্সি সার্ভার অভ্যন্তরে রয়েছে? প্রক্সিপাস রিভার্সের নির্দেশিকাতে অবস্থানের শিরোনামও পরিবর্তিত হতে পারে ( httpd.apache.org/docs/2.0/mod/mod_proxy.html#ProxyPassRevers )।

কিছুটা প্রক্সি অভ্যন্তরীণ মধ্যে থাকতে পারে, আগামীকাল কাজ করার সাথে সাথেই আমি এটি খতিয়ে দেখব।

@ জ্যাকব এগার - আমি কোথাও প্রক্সিপাস রিভার্সের নির্দেশিকা খুঁজে পাইনি।
সাইফার

1

পুনর্লিখন সক্রিয় করার পাশাপাশি (যদি আপনার httpd.conf পরিবর্তন করার অ্যাক্সেস থাকে) আপনার সমীকরণ থেকে এই সাইটে থাকা অ্যাপ্লিকেশনটি সরিয়ে ফেলতে হবে। অস্থায়ীভাবে ডিফল্ট index.php (অথবা যে কোনও সূচক পৃষ্ঠা আপনার অ্যাপ্লিকেশনটি পরিবেশন করছে) মুছে ফেলুন / পুনরায় নামকরণ করুন এটি নিশ্চিত করে না যে এটি এর কারণ নয়।

অ্যাপ্লিকেশনগুলির অনেকগুলি প্রতিবেদন রয়েছে (যেমন ওয়ার্ডপ্রেস) যার ফলে এই অ্যাপাচি ডিফল্ট পুনর্নির্দেশের পৃষ্ঠাটি ভুল কনফিগার করা থাকলে তা প্রদর্শিত হবে appear

এছাড়াও, অন্য কোনও 'পুনর্নির্দেশ' নির্দেশনা রয়েছে যেগুলি বিরোধী হতে পারে তা দেখতে বাকী অ্যাপাচি কনফিগারেশনটি পরীক্ষা করে দেখুন।


অ্যাপ্লিকেশন ঠিক আছে, আমি এটি একটি অন্য সার্ভার এবং বিভিন্ন ডোমেনে চেষ্টা করেছি (পুরো অ্যাপটি অনুলিপি করেছি) এবং এটি ঠিক কাজ করেছে। আমার ধারণা এটি অ্যাপাচি কনফিগারেশনের কিছু, তবে আমি কী বুঝতে পারি না।

অ্যাপ্লিকেশনটি ঠিক আছে, তবে এই সার্ভারে সেটআপের সাথেও বিরোধী হতে পারে । দেখে মনে হচ্ছে আপনার অ্যাপটি বর্তমানে প্রস্তুত রয়েছে তাই আমি দেখতে পাচ্ছি কীভাবে 'এটিকে অক্ষম করা' আদর্শ নয়। মজাদার জন্য, আপনি আবিষ্কারটিকে সহায়তা হিসাবে পতাকা হিসাবে পুনঃনির্দেশের শেষে একটি ক্যোরির স্ট্রিং যুক্ত করতে পারেন - তাই / $ 1? Nowww = 1 বা অনুরূপ কিছু।
গ্যাভিন সি

না, এটি উত্পাদন হয় না।

ওহ দুর্দান্ত, তাহলে সূচী ফাইলটিকে সমস্যার অংশ হিসাবে এটি 100% বাদ দিয়ে সরানোর পথে আঘাত করতে পারবেন না :)
গ্যাভিন সি

ওহ, জঘন্য, আমি যেটা লিখতে চাইছিলাম তা হ'ল প্রযোজনায়, এটি কীভাবে ঘটল :-)

0

আপনি কি এই বিকল্প mod_rewrite কোড চেষ্টা করতে পারেন:

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

এটি ঠিক একইভাবে ব্যর্থ হয়েছিল।

আপনি কি পুনর্লিগলোগ সক্ষম করতে পারেন এবং এটি কী থেমে যায় তা দেখতে পারেন।
অনুভা

এবং আমি ঠিক কীভাবে এটি করতে পারি? :-)

দয়া করে এখানে দেখুন: httpd.apache.org/docs/2.0/mod/mod_rewrite.html#rewritelog কেবলমাত্র এই নির্দেশটি .htaccess এ নয় অ্যাপাচি কনফিগারেশনে যায়।
অনুভা

1
আমি আমার অ্যাপাচি ইনস্টলেশনটিতে একই নিয়মটি (উপরে আমার উত্তর হিসাবে) অনুলিপি করেছিলাম এবং আপনার প্রশ্নে আপনার একই একই কার্ল কমান্ডটি চালিয়েছি এবং Location: http://www.domain.com/আমার শিরোনামের অংশ হিসাবে পেয়েছি যাতে আমার ক্ষেত্রে শিরোনাম এবং এইচটিএমএল উভয়ই একই ডোমেন দেখায় www.domain.com। আপনি কি উপরের প্রশ্নে প্রাসঙ্গিক অ্যাক্সেস.লগ লাইন পেস্ট করতে পারেন?
অনুভা

0

আপনি কি [এনসি] এর পরিবর্তে [এনসি] ব্যবহার করার চেষ্টা করতে পারেন, এটি খুব সহজ হতে পারে


এবং এখনও এটি :-) নয় (ইতিমধ্যে চেষ্টা করা হয়েছে, কাজ করেনি)

0

আমি আশা করি আপনার সার্ভার অ্যাক্সেস রয়েছে, সাইট ডকুমেন্ট ফোল্ডার নির্দিষ্ট হওয়ার পরে পুনর্নির্দেশের লাইন যুক্ত হয়েছে

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

আপনার যদি সার্ভারের অ্যাক্সেস না থাকে তবে httaccess এ অংশটি পরিবর্তন / পরিবর্তন করতে এই লাইনটি যুক্ত করুন।

আপনি পুনর্নির্দেশের আগে "পুনরায় লেখার ইঞ্জিন চালু" করতে পারেন নি।


আমি যোগ করেছি RewriteEngine on, যেমনটি আমি বলেছি, এটি অন্য একটি সার্ভারে সঠিকভাবে কাজ করে, কেবল এটির উপর নয়।

ওভাররাইডের অনুমতি দিন সকলকে আপনার সার্ভার কনফিগারেশনের ফাইলগুলিতে এই লাইন যুক্ত করার অনুমতি দিন

0

চেষ্টা করুন:

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

0

Options +FollowSymLinksআপনি যদি একটি ডিরেক্টরি প্রসঙ্গে কাজ করছেন তা নিশ্চিত হন ।

অন্যথায় যদি আপনি নাম ভিত্তিক ভার্চুয়াল হোস্ট ব্যবহার করে থাকেন তবে চেষ্টা করুন:

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

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

ভার্চুয়াল হোস্টের সংজ্ঞা দিয়ে প্রশ্নটি আপডেট করেছি।

আপনি কি উপরোক্ত একাধিক ভার্চুয়ালহোস্ট সমাধানটি চেষ্টা করে দেখেছেন, বা আপনি মোড_উইরাইট ব্যবহার শুরু করেছেন?
ক্রিস

ফার্মগুলিতে, আমি একাধিক ভার্চুয়ালহোস্টগুলি ব্যবহার করতে চাইনি, তবে পরিস্থিতি বিবেচনা করে আমি যেভাবেই চেষ্টা করেছিলাম এবং তাতে কোনও লাভ হয়নি।

0

সমস্ত উত্তর পড়ার পরে আপনি ডি / ইত্যাদি / হোস্ট ফাইলটি পরীক্ষা করতে পারেন ... সম্ভবত আপনার সমস্ত চেক আপনার কম্পিউটার থেকে। কোনও আলাদা অবস্থান থেকে অ্যাক্সেস করার চেষ্টা করুন।


না, ডোমেন সম্পর্কে হোস্টে কিছুই নেই।

0

আমার একটি দ্বিতীয় ধারণা আছে। আপনি যে সার্ভার লগ পোস্ট করেছেন তা "192.168.1.221" এর ঠিকানা দেখায় যা স্থানীয় নেটওয়ার্কের ঠিকানা। সমস্ত লগ এন্ট্রি একই আইপি ঠিকানা দেখায়? যদি এটি হয় তবে আপনার এবং সার্ভারের মধ্যে একটি প্রক্সি রয়েছে। এই প্রক্সি সম্ভবত শিরোনাম পরিবর্তন করতে ProxyPassReverseবা ব্যবহার Header editকরতে পারে Location

ব্যাক-ওন্ড সার্ভারটি Locationবাহ্যিক প্রক্সি সার্ভারের হোস্টনামের পরিবর্তে শিরোনামটিতে নিজের হোস্টনামটি রাখলে সমস্যাটি সমাধান করার জন্য এটি একটি সাধারণ সেটআপ ।

প্রকৃতপক্ষে যদি প্রক্সি সার্ভার থাকে তবে আপনাকে প্রক্সি সার্ভারের কনফিগারেশনটি ব্যাকএন্ড সার্ভারের কনফিগারেশনের পরিবর্তে পরিবর্তন করতে হবে, কারণ প্রক্সি সর্বদা তথ্য ওভাররাইট করে।

এর অর্থ এই যে আমরা সমস্ত সময় ভুল সার্ভারের দিকে চেয়ে থাকি: সমস্যাটি প্রক্সি সার্ভারের সাথে!


আগামীকাল আমি এই সার্ভারটি চালিত সংস্থার প্রযুক্তি সহায়তা কল করছি। আমি মনে করি এটি অবশ্যই হবে, আমি আপনাকে জানিয়ে দেব।
সাইফার


0

আমি বিশ্বাস করি যে আপনার পুনর্লিখনের শর্তের পরে আপনি একটি $ চিহ্ন মিস করছেন। চেষ্টা করুন:

RewriteEngine on
RewriteCond %{HTTP_HOST} ^domain.cz$
RewriteRule ^(.*)$ http://www.domain.cz/$1 [R=301,L]
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.