如何在.htaccess文件中创建重定向,但有两个例外

时间:2017-08-29 作者:N.Hyatt

所以我已经尝试了很长时间,但我似乎无法让它发挥作用。假装我的网站是https://example.com, 附加页面https://example.com/abchttps://example.com/abc-def-g.除了上面列出的两个页面外,该计划是让所有页面,包括存在的页面和不存在的页面,自动重定向到主页。

我尝试过的一切都失败了,要么阻止我访问网站,要么什么都不做,所以我正试图从头开始。

这是.htaccess 当前文件:

# 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
# BEGIN EWWWIO
# END EWWWIO
这是WordPress的标准文件。任何帮助都将不胜感激!

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

在现有WordPress指令之前尝试以下操作:

RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule !^(abc|abc-def-g)$ / [R,L]
这表明,对于任何不是/abc/abc-def-g 并且不映射到物理文件或目录(即静态资源、图像、CSS、JS等),然后重定向到主页。

这个! 上的前缀RewriteRule 模式否定正则表达式。

这是一个临时(302)重定向。

您不需要重复RewriteEngine On 指令。

<小时>UPDATE: 如果URL以尾部斜杠结尾,则应修改RewriteRule 图案

RewriteRule !^(abc|abc-def-g)/$ / [R,L]
或者,将尾部斜杠设置为可选:

RewriteRule !^(abc|abc-def-g)/?$ / [R,L]
另一种写同样东西的方法是(正如你在评论中提到的)使用RewriteCond 指示检查REQUEST_URI 服务器变量,而不是RewriteRule 图案。这可能更容易阅读,但由于RewriteRule 图案始终首先处理。例如:

RewriteCond %{REQUEST_URI} !^/abc/?$
RewriteCond %{REQUEST_URI} !^/abc-def-g/?$
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule ^ / [R,L]
与(使用交替)相同:

RewriteCond %{REQUEST_URI} !^/(abc|abc-def-g)/?$
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule ^ / [R,L]

结束