代码之家  ›  专栏  ›  技术社区  ›  Simon

关于mod重写和mod重定向的帮助

  •  0
  • Simon  · 技术社区  · 14 年前

    我的.htaccess文件是:

    Redirect 301    http://domain.com/news/articles?dtMain_start=150    http://domain.com/news/articles
    Redirect 301    http://domain.com/news/articles?dtMain_start=160    http://domain.com/news/articles
    Redirect 301    http://domain.com/news/articles?dtMain_start=170    http://domain.com/news/articles
    # 
    RewriteEngine On
    RewriteBase /
    
    # The Friendly URLs part
    RewriteCond %{REQUEST_FILENAME} !-f
    RewriteCond %{REQUEST_FILENAME} !-d
    RewriteRule ^(.*)$ index.php?q=$1 [L,QSA]
    

    我还必须加入以下规则

    RewriteEngine On
    RewriteCond %{HTTP_HOST} ^domain.com
    RewriteRule (.*) http://www.domain.co.uk/$1 [R=301,L]
    

    我不能让他们一起工作…有人能帮忙吗…

    我试着在重写前堆叠重定向,我得到了这个… http://www.domain.com/news/articles?q=news/articles?dbMain_start=150
    工业工程 http://domain.com/newpage?q=oldpage

    好吧,mod ou别名和mod ou重写不喜欢彼此。

    我能写点什么吗?

    RewriteCond %{REQUEST_QUERY_STRING} ^.*&bodgeredirect=true$
    RewriteRule ^(.*)&bodgeredirect=true$ index.php?q=$1 [L,QSA]
    
    1 回复  |  直到 14 年前
        1
  •  1
  •   Gumbo    14 年前

    首先: There is not mod_redirect. Redirect 是mod_alias的指令。

    以及 重定向 指令与mod_alias的任何其他指令一样,只对URL路径有效。所以你的 重定向 指令不能按预期工作。使用“改写等价物”替代:

    RewriteCond %{HTTP_HOST} =example.com
    RewriteRule (.*) http://www.example.com/$1 [R=301,L]
    
    RewriteCond %{QUERY_STRING} ^dtMain_start=(150|160|170)$
    RewriteRule ^news/articles$ /news/articles? [L,R=301]
    
    RewriteCond %{REQUEST_FILENAME} !-f
    RewriteCond %{REQUEST_FILENAME} !-d
    RewriteRule ^(.*)$ index.php?q=$1 [L,QSA]
    

    一般来说,如果模式彼此一致,那么混合mod_别名和mod_重写不是一个好主意。