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

htaccess调用重写规则

  •  1
  • fire  · 技术社区  · 14 年前

    这是我的htaccess文件:

    RewriteEngine On
    RewriteCond %{REQUEST_FILENAME} !-f
    RewriteCond %{REQUEST_FILENAME} !-d
    
    # Static pages
    RewriteRule ^print/([0-9]+)$ index.php?action=PublicDisplayPrint&page_id=$1 [L,QSA]
    RewriteRule ^email/([0-9]+)$ index.php?action=PublicDisplayEmail&page_id=$1 [L,QSA]
    RewriteRule ^login$ index.php?action=PublicDisplayLogin [L,QSA]
    RewriteRule ^search$ index.php?action=PublicDisplaySearch [L,QSA]
    RewriteRule ^feedback$ index.php?action=PublicDisplayFeedback [L,QSA]
    RewriteRule ^sitemap$ index.php?action=PublicDisplaySitemap [L,QSA]
    
    # Dynamic pages
    RewriteRule ^(.*)$ index.php?action=PublicDisplayPage&url=$1 [L,QSA]
    

    它似乎在对任何文件调用动态页面规则(徽标.gif例如)所以它似乎没有运行第二和第三线。有什么想法吗?

    2 回复  |  直到 14 年前
        1
  •  4
  •   Gumbo    14 年前

    RewriteCond directive 只属于以下第一个 RewriteRule directive 重写条件 条件只适用于第一个 重写规则 而不是其他规则,尤其是最后一条规则。

    在最后一个 指令:

    RewriteCond %{REQUEST_FILENAME} !-f
    RewriteCond %{REQUEST_FILENAME} !-d
    RewriteRule ^(.*)$ index.php?action=PublicDisplayPage&url=$1 [L,QSA]
    
        2
  •  1
  •   Vinko Vrsalovic    14 年前

    这个 RewriteCond RewriteRule 所以你的最后7条规则将适用于任何请求。

    您可以重复每个规则的条件,将其放在最后一个规则上,或者放一个显式规则以按原样提供内容(这更灵活,因为允许您稍后添加更多动态规则):

    RewriteEngine On
    RewriteCond %{REQUEST_FILENAME} -f
    RewriteCond %{REQUEST_FILENAME} -d
    #If it's a file or directory, serve as is, without rewriting
    RewriteRule ^ - [L] 
    
    #Rest of the rules