Regex 在.htacces中使用可选参数重写重定向规则

Regex 在.htacces中使用可选参数重写重定向规则,regex,apache,mod-rewrite,Regex,Apache,Mod Rewrite,我想改写以下内容: www.domain.de/123/hello 致: 我有一条规则: RewriteEngine On Options +FollowSymlinks RewriteBase / RewriteRule ^([^/]+)/([^/]+)?$ index.php?a=$1&b=$2 [L,QSA,NC] 它很好用。但我也希望它也能与输入一起工作: www.domain.de/123 (这里我将得到一个404错误。) 在这种情况下,&b呼喊应该是空的。 如何实

我想改写以下内容:

www.domain.de/123/hello
致:

我有一条规则:

RewriteEngine On
Options +FollowSymlinks 
RewriteBase / 

RewriteRule ^([^/]+)/([^/]+)?$ index.php?a=$1&b=$2 [L,QSA,NC]
它很好用。但我也希望它也能与输入一起工作:

www.domain.de/123
(这里我将得到一个404错误。) 在这种情况下,&b呼喊应该是空的。
如何实现这一点?

您可以将这些规则与第二个参数的可选匹配一起使用:

RewriteEngine On
Options +FollowSymlinks 
RewriteBase / 

RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule ^([^/]+)(?:/([^/]+))?/?$ index.php?a=$1&b=$2 [L,QSA]
此处的
(?:/([^/]+)?
是一个可选匹配项,以确保上述规则同时匹配:

www.domain.de/123/hello


www.domain.de/123/hello
的目标重写应该是什么?目标应该是:www.domain.de/index.php?a=$1&b=$2a=123和b=hello或b=empty,如果是www.domain.de/123I,我会这样做:RewriteRule^([^/]+)/([^/]+)?/$index.php?a=$1&b=$2[QSA,NC]但它只适用于给定的斜杠,我不会。谢谢你的支持。可选匹配是什么意思。我需要两条规则吗?作为一条规则,它不起作用。该规则不能正确工作。我不知道为什么。如果我通过PHP包含一个文件,它似乎不在root.with www.domain.de/123中,它与www.domain.de/123/hello一起工作,includet文件semms将位于不同的位置。我对呈现html的php文件进行了包含。以下是所有路径brocken。路径断开是不同的问题,与我的规则无关。要修复此问题,请在页面HTML的
标记下方添加此选项:
www.domain.de/123/hello
www.domain.de/123