.htaccess&WordPress:从RewriteRule中排除文件夹

问题描述 投票:20回答:15

我在WordPress中有这个.htaccess文件。它位于/ public_html /(web root)。我需要从重写引擎中排除一个文件夹(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

有什么建议?

More data

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


AuthName "Clasificados"
AuthType "basic"
AuthUserFile /home/ig000192/public_html/csNewsAd/.passwd
Require valid-user
wordpress .htaccess mod-rewrite
15个回答
42
投票
RewriteCond %{REQUEST_URI} !^/(csNewsAd|csNewsAd/.*)$ 

代替

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

0
投票

你可以添加这样的东西:

RewriteCond %{REQUEST_URI} !^/csNewsAd 

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

RewriteCond %{REQUEST_FILENAME} !-d

你确定你和那个文件夹,权利或(确实)另一个.htaccess之间没有其他东西吗?


0
投票

你应该尝试这个

# 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

0
投票

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


0
投票

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

看到这里:http://tanyanam.com/technology/wordpress-exclude-directory-from-url-rewrite-with-htaccess - 线路需要在WordPress之前出现,它不会在它们之后工作。


0
投票

我知道这是一个老帖子,但它仍然帮助了我。我有几个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 ...


0
投票

我的两个地方遇到了类似的问题。我在这里读到的评论对我不起作用,但我终于得到了这个代码:

<IfModule mod_rewrite.c>
  RewriteEngine on

  # stuff to let through (ignore)
  RewriteCond %{REQUEST_URI} "/folder1/" 
  RewriteRule (.*) $1 [L]

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


18
投票

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

ErrorDocument 401 default

有完全相同的问题,这对我有用。这不是重定向不起作用的问题。问题是401(需要授权)错误是nog定义的,因此“popup”没有显示。


5
投票

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

3
投票

.htaccess影响下面的所有目录,所以如果你在csNewsAd中放入.htaccess并带有你想要的重写指令,它将优先于根文件。


2
投票

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

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

1
投票

我第一次开始使用Rails。在导轨的顶部.htaccess是以下两行。

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

当我终于效仿他们的榜样时,它起作用。

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

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

它按照我需要的方式工作。

我们不会谈论我有多少不同的javascript,样式表和图像文件夹....

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


1
投票

这是关于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>

1
投票

这是#1 google结果和错误的答案。

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

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

1
投票

我有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]
© www.soinside.com 2019 - 2024. All rights reserved.