根据路径的开头重定向

Ald*_*dhi 3 apache .htaccess mod-rewrite laravel

我正在构建一个 Laravel 项目。该项目本身有一个结构完全不同的“遗留”版本。据记录,某些用户正在尝试访问在新环境中找不到的文件。

为了快速“修复”,我们想要重定向路径,例如

  • /media/22044/blablabla.pdf/en/press

快速的解决方案是使用

Redirect 301 /media/22044/blabla.pdf /en/press
Run Code Online (Sandbox Code Playgroud)

但我们希望背后的道路/media/是动态的。我对.htaccess东西很陌生。有办法做到吗?

<IfModule mod_rewrite.c>
RewriteEngine on
RewriteCond %{REQUEST_URI} !^public
RewriteRule ^(.*)$ public/$1 [L]

# this one works, but not dynamic
#Redirect 301 /media/2336/blabla.pdf /en/press

# failed experiments
#Redirect 301 (\/media)(.*)$ /en/press
#Redirect 301 ^/media/(.*)$ /en/press
#RewriteRule ^/media/(.*) /en/press [R=301,NC,L]
Redirect 301 /media/(.*) /en/press
</IfModule>
Run Code Online (Sandbox Code Playgroud)

MrW*_*ite 6

在现有重写之前,您需要使用 mod_rewriteRewriteRule指令(而不是Redirect) 。

例如:

RewriteEngine on

# Redirect "/media/<anything>" to "/en/press"
RewriteRule ^media/ /en/press [R=301,L]

# Rewrite all requests to the "/public" subdirectory
RewriteCond %{REQUEST_URI} !^public
RewriteRule ^(.*)$ public/$1 [L]
Run Code Online (Sandbox Code Playgroud)

Redirect指令使用简单的前缀匹配,而不是正则表达式。但也会稍后在请求中进行处理。

RewriteRule 请注意,与指令不同,模式匹配的 URL 路径不以斜线开头Redirect