Apache mod_在.htaccess文件中重写未知路径的第一部分
我试图编写一个重写规则,将路径段塞更改为查询参数。它适用于web服务,只有在主机以api启动时才应重写此规则。有两个鼻涕虫,我正试图捕捉和重写。第一个是可选的,是一个版本(即v1.2),第二个是服务域(即客户、交易等) 应重写为?版本=2.5和域=客户 我还希望支持默认版本,以便 应重写为?版本=&域=客户 下面是我的.htaccess文件的外观:Apache mod_在.htaccess文件中重写未知路径的第一部分,apache,.htaccess,mod-rewrite,Apache,.htaccess,Mod Rewrite,我试图编写一个重写规则,将路径段塞更改为查询参数。它适用于web服务,只有在主机以api启动时才应重写此规则。有两个鼻涕虫,我正试图捕捉和重写。第一个是可选的,是一个版本(即v1.2),第二个是服务域(即客户、交易等) 应重写为?版本=2.5和域=客户 我还希望支持默认版本,以便 应重写为?版本=&域=客户 下面是我的.htaccess文件的外观: RewriteEngine On RewriteBase / RewriteCond %{HTTP_HOST} ^api\..* RewriteR
RewriteEngine On
RewriteBase /
RewriteCond %{HTTP_HOST} ^api\..*
RewriteRule ^v([\d\.]*)?\/?([^\/]*)$ ?version=$1&domain=$2
上面的第一个示例运行良好,但我无法使用默认版本路径。我试过很多不同的东西。我原以为以^.*v开头会有帮助,但事实并非如此。当你不知道起始字符时,有人知道如何匹配吗?试试:
RewriteCond %{HTTP_HOST} ^api\..*
RewriteCond %{QUERY_STRING} !version=
RewriteRule ^(v([\d\.]*))?\/?([^\/]*)$ /?version=$2&domain=$3 [L]
这使得/v
部件成为可选部件:
->/v2.5/foo
/?version=2.5&domain=foo
->/foo
/?版本=&domain=foo
->/v/foo
/?版本=&domain=foo
/v
部件成为可选部件:
->/v2.5/foo
/?version=2.5&domain=foo
->/foo
/?版本=&domain=foo
->/v/foo
/?版本=&domain=foo
RewriteCond%{QUERY\u STRING}!version=
就在规则之前(与HTTP\U主机条件一起),谢谢!这很有魅力。我真的不确定发生了什么事。我认为将分组放在整个第一部分周围并使其成为可选的将是可行的。为什么它会给我一个500服务器错误?你介意解释一下吗?@ChristopherMartin重写引擎继续循环所有规则,直到应用规则后进入引擎的URI相同。如果没有某种方法阻止它(比如检查以确保version=
不存在),它将在apache放弃并返回500@ChristopherMartin忘了它会在你身上循环,添加RewriteCond%{QUERY\u STRING}!version=
就在规则之前(与HTTP\U主机条件一起),谢谢!这很有魅力。我真的不确定发生了什么事。我认为将分组放在整个第一部分周围并使其成为可选的将是可行的。为什么它会给我一个500服务器错误?你介意解释一下吗?@ChristopherMartin重写引擎继续循环所有规则,直到应用规则后进入引擎的URI相同。如果没有某种方法来阻止它(比如检查以确保version=
不在那里),它将在apache放弃并返回500之前循环多次