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

时间:2010-02-23 23:21:55

标签: wordpress .htaccess mod-rewrite

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

有什么建议吗?

更多数据

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


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

18 个答案:

答案 0 :(得分:42)

RewriteCond %{REQUEST_URI} !^/(csNewsAd|csNewsAd/.*)$ 

而不是

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

答案 1 :(得分:18)

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

ErrorDocument 401 default

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

答案 2 :(得分: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 :(得分:3)

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

答案 4 :(得分:2)

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

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

答案 5 :(得分:1)

我第一次开始使用Rails。在轨道的顶部.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,样式表和图片文件夹......

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

答案 6 :(得分: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]

答案 7 :(得分: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>

答案 8 :(得分:1)

这是Google排名第一的结果,而且答案错误。

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

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

答案 9 :(得分:0)

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

请参阅此处:http://tanyanam.com/technology/wordpress-exclude-directory-from-url-rewrite-with-htaccess - 该行需要在WordPress之前出现,在它们之后无效。

罗布

答案 10 :(得分:0)

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/

答案 11 :(得分:0)

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

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

答案 12 :(得分: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

获得

答案 13 :(得分: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 ...

答案 14 :(得分:0)

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

答案 15 :(得分: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

答案 16 :(得分:0)

你可以添加这样的东西:

RewriteCond %{REQUEST_URI} !^/csNewsAd 

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

RewriteCond %{REQUEST_FILENAME} !-d

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

答案 17 :(得分:-1)

似乎是:

ErrorDocument 401默认

.htaccess的结尾

是正确的答案。我尝试了多种解决方案,但随后动脑筋在另一个浏览器(Safari)上对其进行了检查,然后清除了缓存,并在chrome上硬重载了网站,这给出了积极的结果(业余错误)。该死的缓存。

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