2010-06-25 159 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]