.htaccess 文件中 mod_rewrite 的路径第一部分未知

.htaccess 文件中 mod_rewrite 的路径第一部分未知

我正在尝试编写重写规则以将路径 slug 更改为查询参数。它用于 Web 服务,并且仅当主机以 api 开头时才应重写此规则。我试图捕获和重写两个 slug。第一个是可选的,是一个版本(即 v1.2),第二个是服务域(即客户、交易等)。

http://api.domain.com/v2.5/customers应重写为 ?version=2.5&domain=customers

我还想支持默认版本,以便

http://api.domain.com/customers应重写为 ?version=&domain=customers

以下是我的 .htaccess 文件的内容:

RewriteEngine On
RewriteBase /

RewriteCond %{HTTP_HOST} ^api\..*
RewriteRule ^v([\d\.]*)?\/?([^\/]*)$ ?version=$1&domain=$2

上面的第一个例子运行良好,但我无法让默认版本路径工作。我尝试了很多不同的方法。我以为以 ^.*v 开头会有帮助,但事实并非如此。有人知道在不知道起始字符的情况下如何使其匹配吗?

答案1

尝试这个:

# Handle the version-including requests first..
RewriteCond %{HTTP_HOST} ^api\..*
RewriteRule ^v([\d\.]*)/([^/]*)$ ?version=$1&domain=$2 [L]

# ..then catch requests that don't include a version.
RewriteCond %{HTTP_HOST} ^api\..*
RewriteRule ^([^/]*)$ ?version=&domain=$1 [L]

它可以在单个正则表达式中完成,但这样可读性会更强。

相关内容