.htaccess 基于路径的开始的htaccess重定向

iyfjxgzm  于 2023-01-31  发布在  其他
关注(0)|答案(2)|浏览(224)

我正在构建一个laravel项目,这个项目本身有一个结构完全不同的“遗留”版本,记录显示一些用户试图访问一个在新环境中找不到的文件。
为了快速“修复”,我们希望重定向路径,如下所示

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

最快的解决办法是使用

Redirect 301 /media/22044/blabla.pdf /en/press

但是我们希望/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>
fykwrbwg

fykwrbwg1#

您需要在现有重写 * 之前 * 使用mod_rewrite RewriteRule指令(不是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]

Redirect指令使用简单的前缀匹配,而不是正则表达式,但也在请求的后面处理。
请注意,与Redirect指令不同,RewriteRule * pattern * 匹配的URL路径不是以斜杠开头。

2sbarzqh

2sbarzqh2#

请使用您显示的示例和尝试尝试尝试以下.htaccess规则文件。请确保在测试URL之前清除浏览器缓存。

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

###new redirect here...
RewriteCond %{THE_REQUEST} \s/.*/media/22044/blablabla\.pdf\s [NC]
RewriteRule ^  /en/press? [R=301,L]

RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule ^(en/press)/?$ media/22044/blablabla\.pdf [NC,L]
</IfModule>

相关问题