![](/img/trans.png)
[英]After email verification, redirect user to specified path which is based on request
[英]Redirect based on the beginning of the path
我正在构建一个 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>
在现有重写之前,您需要使用 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
模式匹配的 URL 路径不以斜杠开头。
使用您显示的示例和尝试,请尝试遵循 .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>
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.