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