【问题标题】:.htaccess rewrite folder exception.htaccess 重写文件夹异常
【发布时间】:2012-02-29 15:36:19
【问题描述】:

所以我有以下重写规则:

RewriteRule ([^/]*)/([^/]*)/([^/]*)$ /index.php?grandparent=$1&parent=$2&page=$3
RewriteRule ([^/]*)/([^/]*)$ /index.php?&parent=$1&page=$2
RewriteRule ([^/]*)$ /index.php?page=$1    

但我需要这个不传递到某些子域的索引页面,所以在此之前我有以下重写条件:

RewriteCond %{REQUEST_URI} !^/css/.*$
RewriteCond %{REQUEST_URI} !^/js/.*$
RewriteCond %{REQUEST_URI} !^/admin/.*$

因此,在这些目录中查找任何文件(包括可能位于这些目录的子目录中的文件)时,这些规则将不适用。然而,它们仍然不断被重写为index.php

如何为这些目录设置例外?

【问题讨论】:

    标签: regex apache .htaccess mod-rewrite


    【解决方案1】:

    你的 RewriteCond 应该是这样的:

    RewriteCond %{REQUEST_URI} ^/(admin|js|css)/ [NC]
    

    此外,您必须在所有 RewriteRule 行中使用 LQSA 标志,如下所示:

    # skip these paths for redirection
    RewriteCond %{REQUEST_URI} ^/(admin|js|css)/ [NC]
    RewriteRule ^ - [L]
    
    RewriteRule ([^/]+)/([^/]+)/([^/]+)/?$ index.php?grandparent=$1&parent=$2&page=$3 [L,QSA]
    RewriteRule ([^/]+)/([^/]+)/?$ index.php?&parent=$1&page=$2 [L,QSA]
    RewriteRule ([^/]+)/?$ index.php?page=$1 [L,QSA]
    

    【讨论】:

    • 这对我有用,但令人惊讶的是没有像RewriteCond %{REQUEST_URI} ^/(admin|js|css)/ [NC] 这样的感叹号。我不是 htaccess mod-rewrite 专家,但也许应该对其进行编辑?
    【解决方案2】:

    试试这个:

    RewriteEngine On
    RewriteBase /
    
    RewriteCond %{REQUEST_URI} ^/(admin|css|js)/
    RewriteRule . - [S=3] #skip the next 3 rules if the RewriteCond match
    
    RewriteRule ([^/]*)/?$ index.php?page=$1 [NC,L,QSA]
    RewriteRule ([^/]*)/([^/]*)/?$ index.php?&parent=$1&page=$2 [NC,L,QSA]
    RewriteRule ([^/]*)/([^/]*)/([^/]*)/?$ index.php?grandparent=$1&parent=$2&page=$3 [NC,L,QSA]
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2015-09-27
      • 2011-09-13
      • 1970-01-01
      • 2015-02-01
      • 1970-01-01
      相关资源
      最近更新 更多