【问题标题】:.htaccess & WordPress: Exclude folder from RewriteRule.htaccess & WordPress:从 RewriteRule 中排除文件夹
【发布时间】:2011-01-20 07:44:19
【问题描述】:

我在 WordPress 中有这个 .htaccess 文件。它位于 /public_html/(网络根目录)。我需要从重写引擎中排除一个文件夹(csNewsAd)。我已经尝试过这个,基于另一个类似的问题在这里 SO,但根本没有工作。

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

有什么建议吗?

更多数据

/csNewsAd 内还有另一个 .htaccess 用于密码保护:


AuthName "Clasificados"
AuthType "basic"
AuthUserFile /home/ig000192/public_html/csNewsAd/.passwd
Require valid-user

【问题讨论】:

    标签: wordpress .htaccess mod-rewrite


    【解决方案1】:

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

    【讨论】:

    • 即使只是在您想要忽略的目录中创建一个空的 .htaccess 文件也可以解决问题。
    • @AndrewTibbetts,你说得对:当时不知道。
    【解决方案2】:

    您可以添加如下内容:

    RewriteCond %{REQUEST_URI} !^/csNewsAd 
    

    但这不应该是必需的,因为如果 csNewsAd 确实是一个目录(文件夹),它不应该首先被重写,因为

    RewriteCond %{REQUEST_FILENAME} !-d
    

    您确定在您与该文件夹、权限或(实际上)另一个 .htaccess 之间没有其他任何东西吗?

    【讨论】:

    • 还有另一个 .htaccess 用于密码保护。我将代码添加到问题中。
    【解决方案3】:

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

    RewriteRule ^csNewsAd($|/) - [L]
    

    【讨论】:

    • @Joel Alejandro:您是否将其他规则替换为前导 /
    【解决方案4】:
    RewriteCond %{REQUEST_URI} !^/(csNewsAd|csNewsAd/.*)$ 
    

    而不是

    RewriteRule ^/csNewsAd($|/) - [L] 
    

    【讨论】:

    • 也没有用。这很奇怪,因为这 应该 已经工作了。我开始讨厌 Wordpress,还不如尝试配置一个子域来访问这个文件夹并摆脱这个问题。
    • 虽然没用,但我还是把这个作为公认的答案,因为它是最完整的一个。
    • 我会尝试 Wordpress 官方论坛。过去我在这个 CMS 中遇到过一些奇怪的问题,他们解决了。如果它不起作用,请尝试在您的 .htaccess 中插入一些垃圾,看看它是否真的起作用,也许这是您安装的另一个问题。祝你好运!
    • +1 干得好。我看了 WP MU 几个小时才回来,意识到我仍然想这样做。
    • 请更新源链接。它会导致与问题无关的德语页面。
    【解决方案5】:

    我第一次开始使用 Rails 做这件事。 rails .htaccess 的顶部是以下两行。

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

    当我最终效仿他们的榜样时,它奏效了。

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

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

    它按我需要的方式工作。

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

    但这确实使我的“错误”文件不那么痛苦。如果有人添加了一个不存在的图像文件,我的调度不必处理它。

    【讨论】:

      【解决方案6】:

      遇到了同样的问题,在这里找到了我的问题的答案: 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
      

      【讨论】:

      • 试过这个,但它似乎破坏了其他非目录名称匹配的永久链接。最后,我得到了@Joel Alejandro 问题中的代码按原样工作。是否只是需要重新加载 apache 配置的问题?见developer.mindtouch.com/en/kb/…
      【解决方案7】:

      你应该试试这个

      # 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
      

      【讨论】:

        【解决方案8】:

        我很确定您已经排除了这一点,但是由于我是为了同样的问题来到这里的,所以我想与您分享一下:在我的情况下,问题实际上在于 - 显然,不是能够访问该文件夹,排除被忽略。

        【讨论】:

          【解决方案9】:

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

          ErrorDocument 401 default
          

          遇到了完全相同的问题,这对我有用。 重定向不起作用不是问题。问题是未定义 401(需要授权)错误,因此“弹出窗口”不显示。

          【讨论】:

          • 这是对我有用的确切答案。我有一个受密码保护的子目录,当我在根目录中安装 Wordpress 时无法回答。
          • 优秀。这对我来说也适用于排除文件夹的问题,以便它返回常规 404 而不是通过 wordpress 解析它。当然我把 401 改成了 404。
          • 这正是我所需要的!所有其他的解决方案都不起作用!
          【解决方案10】:

          值得注意的是,这行在 .htaccess 流中的位置很重要。

          请看这里:http://tanyanam.com/technology/wordpress-exclude-directory-from-url-rewrite-with-htaccess - 该行需要在 WordPress 之前出现,在它们之后将不起作用。

          罗伯

          【讨论】:

            【解决方案11】:

            我有 GoDaddy 主机,这个问题杀死我。我一遍又一遍地遇到相同的问题,因为 public_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 或 CodeIgniter 正在处理它):

            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]
            

            为了解决这个问题,我在 public_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]
            

            【讨论】:

              【解决方案12】:

              这是我关于 GoDaddy WordPress 网站的解决方案。我的安装有一个 web.config 文件,所以我添加了一个重写规则。我想要一个 /ApiData 路径,我可以在其中运行 MVC.net 应用程序(虚拟目录)以进行 AJAX 调用。

              <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>
              

              【讨论】:

              • 我将子目录中的 DNN 站点替换为根目录中的 WordPress 站点。这很完美,所以在我建立新站点时,我仍然可以看到旧的 DNN 站点。
              【解决方案13】:

              我知道这是一篇旧帖子,但它仍然对我有所帮助。我遇到了几个 RewriteRules 块的额外问题:

              ##
              ## 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]
              

              并且必须在每个块之前添加我的 RewriteCond...

              【讨论】:

                【解决方案14】:

                这是排名第一的谷歌结果和错误的答案。

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

                <IfModule mod_rewrite.c>
                    RewriteEngine On
                    RewriteBase /
                    RewriteCond %{REQUEST_URI} ^/subdirectoryname1/(.*)$ [OR]
                    RewriteCond %{REQUEST_URI} ^/subdirectoryname2/(.*)$ [OR]
                    RewriteRule ^.*$ - [L]
                </IfModule>
                

                【讨论】:

                • 这可能与这个问题已有 8 年历史有关。这里之前的信息可​​能都没有用。
                • 对,这段代码在 WP htaccess 中对我有用,在 WP 决定将 404 not found 显示到部署在上一级子目录的其他 php 程序中之前,我从来不需要这些东西
                【解决方案15】:

                我的两个网站都遇到了类似的问题。我在这里读到的 cmets 对我不起作用,但我终于让这段代码工作了:

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

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

                【讨论】:

                • 欢迎来到 Stack Overflow!请注意,在链接到您自己的网站时,您应该明确提及它是您的网站,否则它将作为垃圾邮件被删除。目前我已经删除了链接,因为没有它们,帖子仍然可以正常工作。
                【解决方案16】:

                尝试使用这条规则:D 请注意,仪表板是我要排除的目录的名称,因此请根据您的需要进行更改。

                RewriteRule ^(dashboard)($|/) – [L]
                

                【讨论】:

                  【解决方案17】:

                  好像是这样的:

                  ErrorDocument 401 默认

                  在.htaccess的末尾

                  是正确的答案。我尝试了许多解决方案,但随后脑电波在另一个浏览器(safari)上检查它,然后清除缓存并在 chrome 上硬重新加载网站给出了积极的结果(业余错误)。该死的缓存。

                  在 Mac 上(在 Chrome 中),您需要“控制”点击页面上的任意位置。然后选择“检查”,这将允许您“控制”单击小圆形箭头(重新刷新按钮),它将提供选项 - 一个是“空缓存和硬重新加载”。对恢复理智非常有用。

                  【讨论】:

                    【解决方案18】:

                    Lukasz 的这篇文章对我有用。我在子目录中将 React 与 React Router 一起使用,并且在我修改 .htaccess 文件以在 WordPress 重写之前具有重写条件之前得到 404。

                    这里有 3 行:

                    RewriteCond %{REQUEST_URI} ^/MY-REACT-SUB-DIR/.*
                    RewriteCond %{REQUEST_FILENAME} !-f
                    RewriteRule ^.*$ /MY-REACT-SUB-DIR/index.html [L]
                    

                    这是 WordPress 重写之前完整 .htaccess 代码中的这 3 行代码:

                    <IfModule mod_rewrite.c>
                    RewriteEngine On
                    RewriteRule .* - [E=HTTP_AUTHORIZATION:%{HTTP:Authorization}]
                    RewriteBase /
                    RewriteCond %{REQUEST_URI} ^/MY-REACT-SUB-DIR/.*
                    RewriteCond %{REQUEST_FILENAME} !-f
                    RewriteRule ^.*$ /MY-REACT-SUB-DIR/index.html [L]
                    RewriteRule ^index\.php$ - [L]
                    RewriteCond %{REQUEST_FILENAME} !-f
                    RewriteCond %{REQUEST_FILENAME} !-d
                    RewriteRule . /index.php [L]
                    </IfModule>
                    
                    # END WordPress
                    

                    请务必阅读 Lakasz 的帖子,因为您可能还需要修改您的 React 应用程序: https://lukaszzagroba.com/how-to-deploy-a-react-app-in-a-subdirectory-on-a-wordpress-site/

                    【讨论】:

                      猜你喜欢
                      • 2023-04-03
                      • 2012-03-04
                      • 2013-02-24
                      • 2012-11-30
                      • 1970-01-01
                      • 1970-01-01
                      • 1970-01-01
                      • 1970-01-01
                      相关资源
                      最近更新 更多