2011-01-31 18 views
7

मेरे पास पुरानी .html और .php पृष्ठों के सेट के साथ एक साइट है जिसे एक सीएमएस में रखा गया है।.htaccess में mod_rewrite और mod_alias (301 पुनर्निर्देशित) का उपयोग कर?

वर्तमान में .htaccess फ़ाइल में वहाँ के बारे में 30 mod_alias निम्नलिखित रूप में रीडायरेक्ट कर रहे हैं:

redirect 301 /oldpage1.html http://www.example.com/newpage1.php 
redirect 301 /oldpage2.php http://www.example.com/newpage2.php 
redirect 301 /oldpage3.php http://www.example.com/newpage3.php 

लेकिन हम हमारे सीएमएस में सुंदर यूआरएल है, जो प्रपत्र http://www.example.com/pagename.php ले जाएगा mod_rewrite का उपयोग करना चाहते हैं, इसलिए

RewriteEngine on 
RewriteBase/
RewriteCond %{REQUEST_FILENAME} !-f 
RewriteCond %{REQUEST_FILENAME} !-d 
RewriteRule ^(.+)$ index.php?page=$1 

पल दोनों एक साथ लागू किया जा रहा है, जिसमें परिणाम पर:

http://www.example.com/newpage1.php?page=oldpage1.html 
भी निम्न है

मैं पुनर्लेखन नियम केवल जब कोई मुकाबला नहीं mod_alias द्वारा किया गया है 301 बयानों अनुप्रेषित, ताकि निम्नलिखित होता है कैसे लागू कर सकते हैं:

http://www.example.com/oldpage1.html -> पुनर्निर्देश करने के लिए -> http://www.example.com/newpage1.php -> जो के रूप में व्यवहार किया जाता है - > http://www.example.com/index.php?page=/newpage1.php

किसी भी संकेत की बहुत सराहना की जाएगी? धन्यवाद।

उत्तर

10

मैं एक great explanation of mod_rewrite and mod_alias

में जवाब मिला समस्या यह है कि mod_rewrite हमेशा की तरह, आदेश .htaccess में रखा जाता है की परवाह किए बिना mod_alias से पहले होता है। यह इस स्थिति के लिए आवश्यक आदेश के विपरीत है।

चाल redirect 301 के बजाय RewriteRule [R=301] का उपयोग करना है, और इसलिए mod_rewas के साथ मिश्रण करने के बजाय सब कुछ के लिए mod_rewrite का उपयोग करें।

पूर्ण समाधान इस प्रकार है:

RewriteEngine on 
RewriteBase/

RewriteRule ^oldpage1.html /newpage1.php [R=301,L] 
RewriteRule ^oldpage2.php /newpage2.php [R=301,L] 
RewriteRule ^oldpage3.php /newpage3.php [R=301,L] 

RewriteCond %{REQUEST_FILENAME} !-f 
RewriteCond %{REQUEST_FILENAME} !-d 
RewriteRule ^(.+)$ index.php?page=$1 
संबंधित मुद्दे