.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]
我有两种路线。
这个有效:
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]