2010-06-25 125 views
0

我想添加一個簡單的301規則到codeigniter網站的.htaccess文件。htaccess 301重定向不工作

redirect 301 /newsletter http://sub.domain.com/newsletters/may2010 

當我訪問http://sub.domain.com/newsletter重定向進入

http://sub.domain.com/newsletters/may2010/?/newsletter 

我不知道在哪裏的?/新聞的來源。完整的.htaccess文件:

<IfModule mod_rewrite.c> 
    RewriteEngine On 
    RewriteBase/ 

    redirect 301 /newsletter http://sub.domain.com/newsletters/may2010 

    #Removes access to the system folder by users. 
    #Additionally this will allow you to create a System.php controller, 
    #previously this would not have been possible. 
    #'system' can be replaced if you have renamed your system folder. 
    RewriteCond %{REQUEST_URI} ^system.* 
    RewriteRule ^(.*)$ /index.php?/$1 [L] 

    #Checks to see if the user is attempting to access a valid file, 
    #such as an image or css document, if this isn't true it sends the 
    #request to index.php 
    RewriteCond %{REQUEST_FILENAME} !-f 
    RewriteCond %{REQUEST_FILENAME} !-d 
    RewriteRule ^(.*)$ index.php?/$1 [L] 
</IfModule> 



<IfModule !mod_rewrite.c> 
    # If we don't have mod_rewrite installed, all 404's 
    # can be sent to index.php, and everything works as normal. 
    # Submitted by: ElliotHaughin 

    ErrorDocument 404 /index.php 
</IfModule> 

##################################################### 
# CONFIGURE media caching 
# 
Header unset ETag 
FileETag None 
<FilesMatch "(?i)^.*\.(ico|flv|jpg|jpeg|png|gif|js|css)$"> 
Header unset Last-Modified 
Header set Expires "Fri, 21 Dec 2012 00:00:00 GMT" 
Header set Cache-Control "public, no-transform" 
</FilesMatch> 
# 
##################################################### 

<IfModule mod_deflate.c> 
<FilesMatch "\.(js|css)$"> 
SetOutputFilter DEFLATE 
</FilesMatch> 
</IfModule> 

我該如何解決這個問題?

回答

0

嘿,這是阿帕奇拉你一個鬼鬼祟祟的加工處理技巧。事實證明,將您的Rewrite命令放在文件頂部的事實並不意味着它實際上是先執行的。相反,mod_rewrite會先運行,然後是mod_alias(它負責處理您的Rewrite)。每mod_rewrite

這導致以下改造,:

newsletter --> index.php?/newsletter 

mod_rewrite愉快地設置查詢字符串?/newsletter,而是因爲你沒有指定PT標誌,不直通的URL重寫index.phpmod_alias。因此,mod_alias仍會看到/newsleter路徑,將其重定向到http://sub.domain.com/newsletters/may2010,並將(現在更改的)查詢字符串?/newsletter追加到最後以達成交易。有趣的東西,對吧?

反正速戰速決對於這種情況將無視只是newsletter請求:

#Checks to see if the user is attempting to access a valid file, 
#such as an image or css document, if this isn't true it sends the 
#request to index.php 
RewriteCond %{REQUEST_FILENAME} !-f 
RewriteCond %{REQUEST_FILENAME} !-d 
RewriteCond %{REQUEST_URI} !newsletter$ 
RewriteRule ^(.*)$ index.php?/$1 [L]