Mod 用两个参数重写 ignore last
Mod rewrite with two parameters ignore last
我的 htaccess 中有这个。
RewriteRule ^author/([A-Za-z0-9-]+)/([0-9]+)/?$ author.php?authorslug=&page= [NC,L]
对于我的 url 它只有在两个参数都存在时才有效
example.com/author/name-x/1
但是如果第二个不存在
example.com/author/name-x
它抛出 404。
这也是我的 htaccess 的一部分。
RewriteCond %{REQUEST_FILENAME} !-d
RewriteCond %{REQUEST_URI} ^/(.*?)/?$
RewriteCond %{DOCUMENT_ROOT}/%1.php -f
RewriteRule ^(.*?)/?$ /.php [L]
即使第二个参数不存在,我如何让它工作?
在括号中将所有您希望可选的内容分组,然后是问号:
RewriteRule ^author/([A-Za-z0-9-]+)(/([0-9]+))?$ author.php?authorslug=&page= [NC,L]
现在有 3 组括号,您将有 3 个捕获组和变量。我们的 "make optional" 组在括号序列中排在第二位,因此它填充了 </code> 捕获变量。而你想要捕获的实际值排在第三位,所以它是 <code>
.
您在那里所做的只是使尾部正斜杠成为可选 /?
。
更短:
RewriteRule ^author/([^/]+)(/([0-9]+))?$ author.php?authorslug=&page= [NC,L]
此外,我注意到您的示例中没有结尾的正斜杠 /
,因此我将其从正则表达式中删除。
我的 htaccess 中有这个。
RewriteRule ^author/([A-Za-z0-9-]+)/([0-9]+)/?$ author.php?authorslug=&page= [NC,L]
对于我的 url 它只有在两个参数都存在时才有效
example.com/author/name-x/1
但是如果第二个不存在
example.com/author/name-x
它抛出 404。
这也是我的 htaccess 的一部分。
RewriteCond %{REQUEST_FILENAME} !-d
RewriteCond %{REQUEST_URI} ^/(.*?)/?$
RewriteCond %{DOCUMENT_ROOT}/%1.php -f
RewriteRule ^(.*?)/?$ /.php [L]
即使第二个参数不存在,我如何让它工作?
在括号中将所有您希望可选的内容分组,然后是问号:
RewriteRule ^author/([A-Za-z0-9-]+)(/([0-9]+))?$ author.php?authorslug=&page= [NC,L]
现在有 3 组括号,您将有 3 个捕获组和变量。我们的 "make optional" 组在括号序列中排在第二位,因此它填充了 </code> 捕获变量。而你想要捕获的实际值排在第三位,所以它是 <code>
.
您在那里所做的只是使尾部正斜杠成为可选 /?
。
更短:
RewriteRule ^author/([^/]+)(/([0-9]+))?$ author.php?authorslug=&page= [NC,L]
此外,我注意到您的示例中没有结尾的正斜杠 /
,因此我将其从正则表达式中删除。