.htaccess Htaccess重写到两个不同的文件夹取决于路径

kb5ga3dv  于 2023-06-06  发布在  其他
关注(0)|答案(1)|浏览(149)

我有两个文件夹,applandinglanding文件夹是一个SPA,当用户访问//images/.*/_next/.*时,必须显示该文件夹。每隔一个url路径都应该对app文件夹进行内部重写。所以我在landingapp的文件夹中写了这个.htaccess:

RewriteEngine On

# Redirect root, _next and assets paths to landing folder and subsequent resources
RewriteCond %{REQUEST_URI} ^/(_next|images|)(/.*)?$
RewriteRule ^(.*)$ /landing/$1 [L]

# Redirect everything else to app
RewriteRule ^(.*)$ /app/$1 [L]

当我去/我的浏览器被重定向到/app/public/landing。但是如果我去掉最后一行,着陆就能正确显示出来。

dsf9zpds

dsf9zpds1#

L标志停止当前运行 * 的重写过程 *。这意味着重写的位置在下一次运行中 * 再次 * 重写。由于位置/landing/...与第一个规则的条件不匹配,因此应用了第二个条件,请求被重写为/app/landing/...
你有两个直接的选择:
或者使用END标志而不是L标志,这将完全终止重写过程,而不仅仅是当前运行:

RewriteEngine On

# Redirect root, _next and assets paths to landing folder and subsequent resources
RewriteCond %{REQUEST_URI} ^/$ [OR]
RewriteCond %{REQUEST_URI} ^/(_next|images)/?
RewriteRule ^[^/]+(/.*)$ /landing$1 [END]

# Redirect everything else to app
RewriteRule ^ /app/%1 [L]

或者在第二条规则中添加一个条件:

RewriteEngine On

# Redirect root, _next and assets paths to landing folder and subsequent resources
RewriteCond %{REQUEST_URI} ^/$ [OR]
RewriteCond %{REQUEST_URI} ^/(_next|images)/?
RewriteRule ^[^/]+(/.*)$ /landing$1 [END]

# Redirect everything else to app
RewriteCond %{REQUEST_URI} !^/landing/?
RewriteRule ^ /app%{REQUEST_URI} [L]

注意:我还修复了您的实现中的一些其他小问题。

相关问题