.htaccess 在特定 url 之后重写条件

.htaccess rewrite conditon after spesific url

我使用的是 apache2 和 laravel,所以我将这段代码放在 /public 文件夹 .htaccess

RewriteEngine On

RewriteCond %{REQUEST_FILENAME} !-f 
RewriteCond %{REQUEST_URI} ^/?(blog|dont/you|brave-to|fvck|me)$ 
RewriteRule ^(.*)$ http://%{HTTP_HOST}// [R=301,L]

上面的代码只有在 url 特定于 /url

时才有效

一个例子https://mywebsite.com/bloghttps://mywebsite.com/dont/you

因此 RewriteRule ^(.*)$ http://%{HTTP_HOST}// [R=301,L] 将重定向到 tailling slash

https://mywebsite.com/blog/

也会如此

但是当我想添加动态 slug 时这不起作用 link test

我的意思是,我需要添加尾部斜线 after end of slug,然后是 blog 一个例子,如果 url 像这样 https://mywebsite.com/blog/hey-this-dynamic-slug 这应该是 https://mywebsite.com/blog/hey-this-dynamic-slug/

我必须添加这个条件和规则

RewriteCond %{THE_REQUEST} !\s/(?:blog/)\S+\s [NC]
RewriteRule ^(.*)$ http://%{HTTP_HOST}// [R=301,L]

是的,确实工作正常

https://htaccess.madewithlove.com?share=47516f5c-b5c6-49e9-87fa-3b83cec864fc

但这将强制所有 /

如您所见,当我尝试使用随机文本更改 blog 时,此规则强制添加 /

我只需要为特定 url 和特定 url

之后强制添加尾斜线

好的所以我得到它使用这个条件

RewriteEngine On
// check if not a file
RewriteCond %{REQUEST_FILENAME} !-f 
// check if there start with blog/ and not end with /
RewriteCond %{REQUEST_URI} ^/(blog/.*)[^/]$ [OR]
// OR check if contain specific words
RewriteCond %{REQUEST_URI} ^/(blog|dont/you|brave-to|fvck|me)$
// the do the rule
RewriteRule ^(.*)$ http://%{HTTP_HOST}// [R=301,L]

这是一个example