将所有URL重定向到新URL,但不包括/backend/ with .htaccess

xtupzzrd  于 2022-11-16  发布在  其他
关注(0)|答案(1)|浏览(74)

我要将所有传入查询重定向到新域,/backend除外
我在我的.htaccess里有这个,除了/后端,一切都正常。我试了几个组合,就是不起作用。
我担心/后端是虚拟地址....
我能做什么呢?
以下是代码:

RewriteCond %{HTTP_HOST} ^example.de$ [OR]
RewriteCond %{HTTP_HOST} ^www.example.de$

RewriteCond %{REQUEST_URI} !^/backend/$
 
RewriteRule (.*)$ https://www.bing.de/ [R=302,L]

请帮忙谢谢帕特里克

slsn1g29

slsn1g291#

我担心/后端是虚拟地址....
在这种情况下,您很可能有其他mod_rewrite指令将请求重写到前端控制器(例如index.php)-这就是问题所在。(原始请求的URL),因此重写引擎在第一遍时跳过该规则,一旦请求被重写到前端控制器(例如,index.php),重写引擎就开始第二遍,这导致规则被成功执行,因为URL现在是/index.php(或者无论前端控制器是什么)而不是/backend/
您需要:

  • 修改重写前端控制器请求的其他指令,以便不触发重写引擎的第二次传递。(您没有包括完整的.htaccess文件,因此我暂时不考虑这种方法。)
  • 或者,确保只检查最初请求的URL,而不检查重写的URL。(REQUEST_URI服务器变量会随着请求的重写而修改。)

但是,我假设您的/backend/页面也链接到静态资产(如图像、CSS、JS)?在这种情况下,您还需要为页面使用的任何其他静态资产设置例外,否则这些静态资产也将被重定向。为了这个示例,我假设您所有的静态资产都位于/assets子目录中。
请尝试在根.htaccess文件顶部附近执行以下操作:

RewriteCond %{HTTP_HOST} ^(www\.)?example\.de [NC]
RewriteCond %{THE_REQUEST} !\s/backend/\s
RewriteRule !^assets/ https://www.bing.de/ [R=302,L]

请注意,此规则必须在重写到前端控制器之前执行。
THE_REQUEST服务器变量包含HTTP请求头的第一行,重要的是,它不会随着请求的重写而改变。它包含GET /backend/ HTTP/1.1的字符串(包含请求 * 方法 *、URL 和 * 协议 *)。
如果没有外部资产,则将RewriteRulepattern!^assets/更改为^,以匹配所有内容。

相关问题