从 RewriteRule 中排除文件夹/目录
Posted
技术标签:
【中文标题】从 RewriteRule 中排除文件夹/目录【英文标题】:Exclude a folder/directory from RewriteRule 【发布时间】:2013-02-24 01:52:54 【问题描述】:我有一个非常标准的 WordPress .htaccess,其中包含以下 URL 重写
# BEGIN WordPress
<IfModule mod_rewrite.c>
RewriteEngine On
RewriteBase /
RewriteRule ^index\.php$ - [L]
RewriteCond %REQUEST_FILENAME !-f
RewriteCond %REQUEST_FILENAME !-d
RewriteRule . /index.php [L]
</IfModule>
# END WordPress
WordPress 安装在我的域根目录中。我在子文件夹中有一些其他脚本,例如/opencart 这些子文件夹包含它们自己的 .htaccess 文件。
不幸的是,WordPress 似乎有时会劫持其中一些脚本的重写。
当遇到特定子文件夹时,我如何要求 mod_rewrite 忽略 WordPress 重写规则,例如opencart 并在这些子文件夹中使用 .htaccess 中定义的规则?
【问题讨论】:
【参考方案1】:在站点根目录的 .htaccess 文件中,在 WordPress .htaccess 指令上方添加以下内容:
<IfModule mod_rewrite.c>
RewriteEngine On
RewriteBase /
RewriteCond %REQUEST_URI ^/subdirectoryname1/(.*)$ [OR]
RewriteCond %REQUEST_URI ^/subdirectoryname2/(.*)$ [OR]
RewriteRule ^.*$ - [L]
</IfModule>
【讨论】:
【参考方案2】:# BEGIN WordPress
<IfModule mod_rewrite.c>
RewriteEngine On
RewriteBase /
RewriteRule ^index\.php$ - [L]
RewriteRule ^/(folder1)/(.*) /folder1/$2 [R]
RewriteCond %REQUEST_FILENAME !-f
RewriteCond %REQUEST_FILENAME !-d
RewriteRule . /index.php [L,R]
</IfModule>
# END WordPress
【讨论】:
【参考方案3】:您可以尝试用这个替换完整的 WP 规则集:
# BEGIN WordPress
RewriteEngine On
RewriteBase /
RewriteRule ^index.php$ - [L]
# Include in the next line all folders to exclude
RewriteCond %REQUEST_URI !(folder1|folder2|folder3) [NC]
RewriteCond %REQUEST_FILENAME !-f
RewriteCond %REQUEST_FILENAME !-d
RewriteRule . /index.php [L]
# END WordPress
【讨论】:
建议可能是正确的,但没有得到结果,因为 WordPress 不断覆盖 .htaccess,删除 RewriteCond %REQUEST_URI !(folder1|folder2|folder3) [NC] 这确实是建议的相关部分规则集。 这是另一个问题,确实很奇怪,WP 通常只在安装时更新该文件。检查插件,也许有人正在这样做并禁用所有插件进行测试。还要检查wp-config
以确保没有像define('RELOCATE',true)
这样的行。如果是,请删除它。
我会接受这个答案,尽管它对我不起作用。在我的情况下,问题原来是完全不同的东西,需要一种与我在问题中假设的方法截然不同的方法。以上是关于从 RewriteRule 中排除文件夹/目录的主要内容,如果未能解决你的问题,请参考以下文章