apache2 路径重写以获取参数-使斜杠起作用

apache2 路径重写以获取参数-使斜杠起作用

以下是我当前的.htaccess文件。如果我打开它https://example.com/test,并且它不是以第 2 行指定的结尾之一结尾,它将打开https://example.com/index.php?url=test

RewriteEngine on
RewriteCond %{REQUEST_FILENAME} !\.(css|js|png|jpg|php|svg|gif|webm|webp|eot|ttf|woff|woff2)
RewriteRule ^([^/]+)/? index.php?url=$1 [L,QSA]

但是,如果我尝试打开https://example.com/something/test,它只会打开?url=something而不是?url=something/test。我该怎么做?我对正则表达式一无所知

答案1

正则表达式^([^/]+)/?仅捕获第一个路径段,即[^/]+匹配 1 个或多个非斜杠字符。如果您希望匹配整个 URL 路径,则使用(.+)(匹配 1 个或多个任何字符)。但是,如果您只想匹配 1 或 2 个路径段,是否可以进行更严格的限制?

并且它不是以第 2 行中指定的结尾之一结尾

该条件并未具体检查网址$“以其中一个扩展名结尾”,它会检查其中一个扩展名是否包含在 URL 映射到的文件系统路径中。您需要在正则表达式的末尾添加一个字符串结尾锚点。要专门检查 URL,您应该检查REQUEST_URI服务器变量。

因此,这变成:

RewriteEngine on
RewriteCond %{REQUEST_URI} !\.(css|js|png|jpg|php|svg|gif|webm|webp|eot|ttf|woff|woff2)$
RewriteRule (.+) index.php?url=$1 [L,QSA]

相关内容