代码之家  ›  专栏  ›  技术社区  ›  Joel A. Villarreal Bertoldi

.htaccess&wordpress:从rewriterule中排除文件夹

  •  17
  • Joel A. Villarreal Bertoldi  · 技术社区  · 14 年前

    我在WordPress中有这个.htaccess文件。它位于/public_html/(web root)。我需要从重写引擎中排除文件夹(csnewsad)。我试过这个,基于另一个类似的问题,但根本没用。

    AddHandler x-httpd-php5 .php
    # BEGIN WordPress
    <IfModule mod_rewrite.c>
    RewriteEngine On
    RewriteBase /
    RewriteRule ^/csNewsAd($|/) - [L]
    RewriteCond %{REQUEST_FILENAME} !-f
    RewriteCond %{REQUEST_FILENAME} !-d
    RewriteRule . /index.php [L]
    </IfModule>
    # END WordPress

    有什么建议吗?

    更多数据

    还有另一个.htaccess inside/csnewsad用于密码保护:

    
    AuthName "Clasificados"
    AuthType "basic"
    AuthUserFile /home/ig000192/public_html/csNewsAd/.passwd
    Require valid-user
    
    15 回复  |  直到 5 年前
        1
  •  42
  •   David Anderton    8 年前
    RewriteCond %{REQUEST_URI} !^/(csNewsAd|csNewsAd/.*)$ 
    

    而不是

    RewriteRule ^/csNewsAd($|/) - [L] 
    
        2
  •  18
  •   Jory Hogeveen    11 年前

    将下面的行放在根目录的.htaccess文件中。

    ErrorDocument 401 default
    

    有同样的问题,这对我很有效。 重定向不起作用不是问题。问题是401(需要授权)错误没有被定义,所以“弹出”不会显示。

        3
  •  5
  •   user1389907    12 年前

    有同样的问题,在这里找到了我问题的答案: http://kb.siteground.com/article/How_to_exclude_a_folder_from_Wordpress_permalinks.html

    ——来自现场

    要从WordPress重写规则中排除子文件夹,需要编辑.htaccess文件并更改下面的粗体行:

    # BEGIN WordPress
    <IfModule mod_rewrite.c>
    RewriteEngine On
    RewriteBase /
    RewriteCond %{REQUEST_FILENAME} !-f
    RewriteCond %{REQUEST_FILENAME} !-d
    # RewriteRule . /index.php [L] # Original line
    RewriteRule ./ /index.php [L] # New line
    </IfModule>
    # END WordPress
    
        4
  •  3
  •   markratledge    14 年前

    .htaccess会影响下面的所有目录,因此如果使用所需的重写指令在csnewsad中放置.htaccess,它将优先于根文件。

        5
  •  2
  •   Gumbo    14 年前

    如果在.htaccess文件中使用mod_rewrite,则只需在模式中指定不带本地路径前缀的URL路径。在你的情况下没有领导 / (因为您在文档根目录中 / ):

    RewriteRule ^csNewsAd($|/) - [L]
    
        6
  •  1
  •   LoveAndCoding    12 年前

    我刚开始用轨道来做这个。在轨道顶部。htaccess有以下两行。

    # RewriteCond %{REQUEST_URI} ^/notrails.*
    # RewriteRule .* – [L]
    

    当我最终仿效他们的例子时,它起了作用。

    我想排除图像、javascripts、样式表、css、images global、js global(等等),所以我将上面的改为。

    RewriteCond %{REQUEST_URI} ^(images|javascripts|stylesheets|css|images-globa|js-global|js).*
    RewriteRule .* – [L]
    

    它按我需要的方式工作。

    我们不会谈论我有这么多不同的javascript、样式表和图像文件夹。

    但这确实使我的__错误_文件不那么痛苦。如果有人添加了不存在的图像文件,我的调度就不需要处理它。

        7
  •  1
  •   Pete    8 年前

    这是我关于godaddy wordpress站点的解决方案。我的安装有一个web.config文件,所以我添加了一个重写规则。我需要一个/apidata路径,在该路径中我可以运行用于Ajax调用的mvc.net应用程序(虚拟目录)。

    <system.webServer>
        <!-- ... -->
        <rewrite>
            <rules>
                <rule name="apidata" stopProcessing="true">
                    <match url="apidata"/>
                </rule>
                <rule name="wordpress" patternSyntax="Wildcard">
                    <match url="*"/>
                    <conditions>
                        <add input="{REQUEST_FILENAME}" matchType="IsFile" negate="true"/>
                        <add input="{REQUEST_FILENAME}" matchType="IsDirectory" negate="true"/>
                    </conditions>
                    <action type="Rewrite" url="index.php"/>
                </rule>
    
            </rules>
        </rewrite>
    </system.webServer>
    
        8
  •  1
  •   Adriaan Decoder    5 年前

    我有Godaddy主机,还有这个问题 被杀死的 我。我一次又一次地遇到同样的问题,在公共HTML中的.htaccess选项与我的受密码保护的子目录冲突。

    我最终购买了另一个帐户,因为我对.htaccess文件进行了大约一百万次不同的修改,但没有解决这个问题。我现在分享我的设置和解决方案,只是为了完整和清晰。(正如你所知道的,账户无论如何都是值得的,所以没什么大不了的。)

    如果它看起来像是其他答案的组合,那是因为它是。这一切都花在了工作上。

    目录结构:

    -otherfiles
    ---public_html
    ---.htaccess
    -----subfolder
    ---.htaccess
    

    子文件夹.htaccess具有密码保护功能,因此类似于:

    AuthType Basic
    AuthName "Attendance"
    AuthUserFile "/home/user/.htpasswds/public_html/attendance/passwd"
    require valid-user
    

    public_html.htaccess最初有这个功能,但它没有工作(因为它吞没了所有东西并重新定向,所以fatfreeframework或codeigner处理它):

    RewriteEngine On
    RewriteCond $1 !^(index.php|resources|subfolder|robots.txt)
    RewriteCond %{REQUEST_FILENAME} !-f
    RewriteCond %{REQUEST_FILENAME} !-d
    RewriteCond %{REQUEST_FILENAME} !-l
    RewriteRule ^(.*)$ index.php?/$1 [L,QSA]
    

    为了解决这个问题,我在公共的html.htaccess文件中添加了两行。所以你不必猜测在哪里,我会再次展示整个文件:

    RewriteEngine On
    RewriteCond $1 !^(index.php|resources|robots.txt)
    RewriteCond %{REQUEST_FILENAME} !-f
    RewriteCond %{REQUEST_FILENAME} !-d
    RewriteCond %{REQUEST_FILENAME} !-l
    RewriteCond %{REQUEST_URI} !^/(subfolder|subfolder/.*)$
    ErrorDocument 401 default
    RewriteRule ^(.*)$ index.php?/$1 [L,QSA]
    
        9
  •  0
  •   futtta    14 年前

    您可以添加如下内容:

    RewriteCond %{REQUEST_URI} !^/csNewsAd 
    

    但不需要这样做,因为如果csnewsad确实是一个目录(文件夹),则不应首先重写它,因为

    RewriteCond %{REQUEST_FILENAME} !-d
    

    您确定您和那个文件夹、权限或(实际上)另一个.htaccess之间没有其他内容吗?

        10
  •  0
  •   Preetam Purbia    12 年前

    你应该试试这个

    # BEGIN WordPress
    <IfModule mod_rewrite.c>
    RewriteEngine On
    RewriteBase /
    RewriteRule ^/(gadget)/(.*) /gadget/$2 [R]
    
    RewriteRule ^index\.php$ - [L]
    RewriteCond %{REQUEST_FILENAME} !-f
    RewriteCond %{REQUEST_FILENAME} !-d
    RewriteRule . /index.php [L]
    </IfModule>
    
    # END WordPress
    
        11
  •  0
  •   TheLegs    12 年前

    我很肯定你已经排除了这一点,但既然我来这里是为了同一个问题,我想和你分享:在我的情况下,问题实际上是在权限范围内的-显然,无法访问文件夹,排除被忽略了。

        12
  •  0
  •   rob_was_taken    10 年前

    值得注意的是,在.htaccess的流程中,这条线的走向是很重要的。

    请参见这里: http://tanyanam.com/technology/wordpress-exclude-directory-from-url-rewrite-with-htaccess -该行需要在Wordpress之前到达,之后就不起作用了。

    抢劫

        13
  •  0
  •   Johanness    7 年前

    我知道这是一个古老的职位,但它仍然对我有帮助。我有几个重写器块的附加问题:

    ##
    ## White listed folders
    ##
    RewriteCond %{REQUEST_URI} !^/(phplist|phplist/.*)$
    RewriteCond %{REQUEST_FILENAME} -f
    RewriteCond %{REQUEST_FILENAME} !/.well-known/*
    RewriteCond %{REQUEST_FILENAME} !/storage/app/uploads/.*
    RewriteCond %{REQUEST_FILENAME} !/storage/app/media/.*
    ...
    RewriteCond %{REQUEST_FILENAME} !/modules/.*/(assets|resources)/.*
    RewriteRule !^index.php index.php [L,NC]
    
    ##
    ## Block all PHP files, except index
    ##
    RewriteCond %{REQUEST_URI} !^/(phplist|phplist/.*)$
    RewriteCond %{REQUEST_FILENAME} -f
    RewriteCond %{REQUEST_FILENAME} \.php$
    RewriteRule !^index.php index.php [L,NC]
    
    ##
    ## Standard routes
    ##
    RewriteCond %{REQUEST_URI} !^/(phplist|phplist/.*)$
    RewriteCond %{REQUEST_FILENAME} !-f
    RewriteRule ^ index.php [L]
    

    必须在每个块之前添加重写秒…

        14
  •  0
  •   Jeff Karney    6 年前

    这是1谷歌结果和错误答案。

    正确的答案是添加这个 之前 wordpress指令。

    <IfModule mod_rewrite.c>
        RewriteEngine On
        RewriteBase /
        RewriteCond %{REQUEST_URI} ^/subdirectoryname1/(.*)$ [OR]
        RewriteCond %{REQUEST_URI} ^/subdirectoryname2/(.*)$ [OR]
        RewriteRule ^.*$ - [L]
    </IfModule>
    
        15
  •  0
  •   Adriaan Decoder    5 年前

    我的两个网站也遇到了类似的问题。我在这里读到的注释对我来说不起作用,但我终于让这个代码起作用了:

    <IfModule mod_rewrite.c>
      RewriteEngine on
    
      # stuff to let through (ignore)
      RewriteCond %{REQUEST_URI} "/folder1/" 
      RewriteRule (.*) $1 [L]
    

    从获得 https://www.drupal.org/node/30334