Mod rewrite Apache2 mod_rewrite-如何只在一个子目录中添加尾部斜杠

Mod rewrite Apache2 mod_rewrite-如何只在一个子目录中添加尾部斜杠,mod-rewrite,redirect,apache2,Mod Rewrite,Redirect,Apache2,我将Apache 2.2与两台服务器一起使用: 开发:本地主机/项目/公共 制作:www.example.com 我有一个干净url的现有重写规则(从url中删除'index.php' 我有一条特殊的路线,只有在存在尾随斜线时才有效: 特殊路线(开发):本地主机/公共/文档/ 特殊路线(生产):www.example.com/documentation/ 如何将重写规则添加到现有的.htaccess中,以便始终添加尾随斜杠,但仅用于文档路径?您只需添加另一个仅与/documentatio

我将Apache 2.2与两台服务器一起使用:

  • 开发:本地主机/项目/公共
  • 制作:www.example.com
我有一个干净url的现有重写规则(从url中删除'index.php'

我有一条特殊的路线,只有在存在尾随斜线时才有效:

  • 特殊路线(开发):本地主机/公共/文档/
  • 特殊路线(生产):www.example.com/documentation/

如何将重写规则添加到现有的.htaccess中,以便始终添加尾随斜杠,但仅用于文档路径?

您只需添加另一个仅与
/documentation
匹配的
重写规则,即没有尾随斜杠。第一条规则添加尾部斜杠,然后现有规则添加
index.php

Options +FollowSymLinks
RewriteEngine On

RewriteRule ^(documentation)$ $1/ [NC]

RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule ^(.*)$ index.php/$1 [L]
如果希望浏览器的地址栏也反映尾部斜杠,请将规则更改为

Options +FollowSymLinks -MultiViews

RewriteEngine On
RewriteBase /

RewriteRule ^(documentation)$ $1/ [R=301,NC,L]

RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule ^(.*)$ index.php/$1 [L]

请不要忘记先为每个.htaccess文件添加这些指令一次:

然后你可以试试这个:

RewriteRule ^/?(documentation)$ /$1/ [R,NC,L]
或者这个:

RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteCond %{REQUEST_FILENAME} (.+)/([^/]+)$
RewriteRule ^/?(documentation)/(.+)$ /$1/$2/ [R,NC,L]

我对你的问题感到困惑。

谢谢。是的,我确实需要地址栏来反映后面的斜杠。但您的第二个示例似乎重定向到,而不是。。。有什么想法吗?通过修改后的第二个代码段,这将重定向到开发服务器上不需要的。对于开发服务器和生产服务器,我是否可以使用一个规则?这可以接受,但在开发时使用不同的基本目录
RewriteBase/project/public/
。由于部署目录不同,
.htaccess
不能100%可移植。是否/index.php/
页面确实存在,您想做什么?请解释更多。@Servant example.com/index.php是一个Laravel php应用程序。example.com/documentation/index.html是一个静态html网站。但我决定通过PHP将其作为Laravel路由进行“隧道”,以强制执行访问控制。然而,静态网站中的相对CSS/JS链接只有在文档url上有一个斜杠时才起作用,这就是问题所在。
RewriteRule ^/?(documentation)$ /$1/ [R,NC,L]
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteCond %{REQUEST_FILENAME} (.+)/([^/]+)$
RewriteRule ^/?(documentation)/(.+)$ /$1/$2/ [R,NC,L]