.htaccess mod_rewrite 超薄路由

.htacess mod_rewrite slim routing

我有两种路线。

这个有效:

http://localhost/monitor/test1

这不是:

http://localhost/monitor/test2/test3

这是我当前的规则:

RewriteRule (^[^/]*$) public/ [L]

我知道这个只匹配最后一个斜杠。如何更改正则表达式以匹配两种情况?

第一个解决方案:能否请您尝试以下。

RewriteEngine On
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteCond %{REQUEST_URI} ^/monitor[^/]*/(.*)$
RewriteRule ^.*$ /public/%1 [NC,L]

或者如果您在 REQUEST_URI 开头部分可能有 monitor 以外的任何其他字符串,那么请尝试以下操作。

RewriteEngine On
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteCond %{REQUEST_URI} ^/[^/]*/(.*)$
RewriteRule ^.*$ /public/%1 [NC,L]


第二个解决方案: 或者我们可以在编写 RewriteRule 本身时捕获值,并可以减少 1 RewriteCond 在这里的第一个解决方案中使用。

RewriteEngine On
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule ^[^/]*/(.*)$ /public/ [NC,L]

OR 与 monitor 匹配的关键字:

RewriteEngine On
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule ^monitor[^/]*/(.*)$ /public/ [NC,L]