.htaccess & WordPress:从 RewriteRule 中排除文件夹
Posted
技术标签:
【中文标题】.htaccess & WordPress:从 RewriteRule 中排除文件夹【英文标题】:.htaccess & WordPress: Exclude folder from 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
【问题讨论】:
【参考方案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/
【讨论】:
以上是关于.htaccess & WordPress:从 RewriteRule 中排除文件夹的主要内容,如果未能解决你的问题,请参考以下文章
子域“m”。与 WordPress 和。 htaccess(在 htaccess 中的重写规则冲突。)
apache_conf 通过.htaccess(主.htaccess)保护wordpress网站