使用.htaccess重定向从WordPress中排除路径(阿帕奇)

时间:2019-06-26 作者:Orun

我想从WordPress启动中排除与规则匹配的路径。我通常的做法是使用最后一个标志[L] 在所有其他人之前的规则中。

为了在本例中保持简单,我将假装要匹配一条简单的路径/foo/.

<IfModule mod_rewrite.c>
RewriteEngine On
RewriteRule ^foo/?$ - [L]
RewriteBase /
RewriteRule ^index\\.php$ - [L]
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule . /index.php [L]
</IfModule>
然而,这不起作用。在此旧版本中还建议了一些其他选项Stack Overflow post, 但这些都不管用(无论是对我自己还是该帖评论中的任何人)。

我确实尝试了这种重写条件,而不是规则:

RewriteCond %{REQUEST_URI} ^/?(foo/.*)$
以及添加ErrorDocument 401 default.htaccess 文件

3 个回复
最合适的回答,由SO网友:ChristopherJones 整理而成

一个小问题是你需要更新RewriteRule ./ 在倒数第二行。以下是一个经过更新(测试)的代码片段:

# BEGIN WordPress
<IfModule mod_rewrite.c>
RewriteEngine On
RewriteBase /
RewriteRule ^index\\.php$ - [L]
RewriteCond %{REQUEST_URI} !^/foo/.*$
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule ./ /index.php [L]
</IfModule>

# END WordPress
我测试了两个:

SO网友:T.Todua

您应该使用RewriteCond 而不是RewriteRule. 使用此选项:

RewriteCond %{REQUEST_URI} !/foo/
例如,完整代码可以如下所示:

# BEGIN WordPress
<IfModule mod_rewrite.c>
RewriteEngine On
RewriteBase /
RewriteRule ^index\\.php$ - [L]
RewriteCond %{REQUEST_URI} !/foo/
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule . /index.php [L]
</IfModule>
# END WordPress

SO网友:Nicolai Grossherr

以下规则对我适用

RewriteRule ^(foo)($|/) - [L]
也就是说,任何以foo开头的路径,比如foo、foo、bar等等,都会指向Apache 404,而不是主题404;假设没有具有该路径的实际目录。

规则必须位于WordPress块的最后一个标准行之前:

RewriteRule . /index.php [L]
如果是在RewriteBase /, 它可以在它之前;我之前只是草率地、草率地说了几句。

这样你就有机会离开# BEGIN WordPress# END WordPress 如果你愿意的话,请不要动。通过放置

<IfModule mod_rewrite.c>
RewriteRule ^(foo)($|/) - [L]
</IfModule>
在前面# BEGIN WordPress.

您可能想阻止在WordPress中创建路径,我想到了这一点:

add_filter( \'wp_unique_post_slug\', \'no_more_foo_wp_unique_post_slug\', 2, 6 );
function no_more_foo_wp_unique_post_slug( 
  $slug, $post_ID, $post_status, $post_type, $post_parent, $original_slug 
) {
  if ( $post_parent === 0 ) {
    $pattern = \'/^foo$/\';
    $replace = \'bar\';
    $slug   = preg_replace( $pattern, $replace, $slug );
  }
  return $slug;
}

相关推荐

wp_redirect doen't work

我正在编写一个简单的插件来接受一个用户号码,显示一个包含用户信息的表单,然后发布一个付款金额。用户编号是从这个http文件include\\u once(PLCOA\\u ADMIN\\u PATH.“views/PLCOA payment start.php”)获得的;而且装载得很好。信息表单使用php文件include\\u once(PLCOA\\u ADMIN\\u路径“views/PLCOA payment add.php”)填写;它只有一个字段-表单中的付款金额。当按下提交按钮时,它将运行此功