htaccess rules not applied?

时间:2021-12-18 作者:Mayou Nkensa

这里是完整的。htaccess文件,添加了将所有URL/页面重定向到站点唯一可访问页面(内容除外)的代码,包括和管理页面:

# BEGIN WordPress
# The directives (lines) between "BEGIN WordPress" and "END WordPress" are
# dynamically generated, and should only be modified via WordPress filters.
# Any changes to the directives between these markers will be overwritten.
<IfModule mod_rewrite.c>
RewriteEngine On
RewriteRule .* - [E=HTTP_AUTHORIZATION:%{HTTP:Authorization}]
RewriteBase /
RewriteRule ^index\\.php$ - [L]
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule . /index.php [L]
</IfModule>

# END WordPress


# BEGIN Custom

<IfModule mod_rewrite.c>
## Redirect all except given page/url to given website address
## src: https://stackoverflow.com/questions/54176472/htaccess-redirect-all-links-except-base-url
RewriteCond %{REQUEST_URI} !^/$
RewriteCond %{REQUEST_URI} !^/page-accessible/
RewriteCond %{REQUEST_URI} !^/wp-content/
RewriteCond %{REQUEST_URI} !^/wp-admin/
RewriteCond %{REQUEST_URI} !^/wp-includes/
RewriteRule .* https://molhokwai-tests.cloudaccess.host/page-accessible/ [L,R=301]
</IfModule>

# END Custom
但它只重定向root。

有人能解释一下吗?有没有更好的方法?

Thank you

1 个回复
SO网友:MrWhite

你的规则顺序不对。您的;自定义重定向“;需要位于.htaccess WordPress前端控制器之前的文件,即# BEGIN WordPress 注释标记。

通过将其放置在WordPress代码块之后,它将只对直接映射到文件和目录的请求进行处理(包括文档根目录,但不包括/index.php). (尽管您的自定义重定向实际上排除了根,但根据第一个条件)

<小时/>

UPDATE:

但是RewriteCond %{REQUEST_URI} !^/path/page-accessible/ 被忽略,因此页面也被重定向?

嗯,这不是;已忽略;。但是,请求随后在内部重写为index.php (WP前端控制器),然后在第二次通过重写引擎时将其重定向(这使其看起来像是忽略了上述条件)。

您需要:

排除index.php 将另一个条件添加到规则中。例如:

 RewriteCond %{REQUEST_URI} !^/index\\.php$
 :
或,

确保该规则仅适用于来自客户端的直接请求,而不适用于稍后重写的内部重写请求。例如:

 RewriteCond %{ENV:REDIRECT_STATUS} ^$
 :
TheREDIRECT_STATUS 初始请求时环境变量为空,并设置为;200英寸;(与200 OK HTTP response status相同)在稍后的重写之后。

相关推荐

如何使用htaccess和regex删除URL中的重复和不必要的部分?

我想永久重定向一些已被删除的URL,而机器人坚持遵循它。我有默认的WordPress配置.htaccess.www.example.com/customers/em/customers/any-url 至www.example.com/customers/any-url 以及www.example.com/any-url/map/?str=Av+street+Fight,+19&cit=Alabama&sta=San+Paolo 至www.example.