无法使我的.htaccess正则表达式按预期工作

时间:2019-07-07 11:22:54

标签: regex .htaccess

我使用正则表达式将.htaccess用于漂亮的网址。

.htaccess中有多个RewriteRule规则,它们都很好用。

我遇到其中一个问题,我无法在哪里出问题了,只能把我带到找不到的404页面。

RewriteRule ^member/password-reset/v/([0-9]+)?/([0-9]+)?/([a-z0-9]+)?$ /member/password-reset-verify.php?&uid=$1&id=$1&t=$1 [NC,L]

丑陋的网址看起来像这样(不带括号):

/member/password-reset-verify.php?&uid=(user_uid_here)&id =(another_id_here)&t =(令牌)

我希望漂亮的网址看起来像这样(不带括号)

/ member / password-reset / v /(user_uid_here)/(another_id_here)/(token)

  • uid(仅包含数字)

  • id(仅包含数字)

  • 令牌(可以包含字母和数字)

很遗憾,我无法使RewriteRule正常工作。如果能使它正常工作,我将不胜感激。

1 个答案:

答案 0 :(得分:1)

我在上面的评论中已经提到了这个问题的一些问题。

尽管如此,我还是会尝试清理一下您当前的规则:

RewriteEngine on
RewriteRule ^/?member/password-reset/v/(\d+)/(\d+)?/(\w+)/?$ /member/password-reset-verify.php?uid=$1&id=$2&t=$3 [END]

如果您收到HTTP状态500(内部服务器错误)的机会,则可能是您使用的Apache HTTP服务器版本非常旧。您将在http服务器的错误日志文件中看到对未定义END标志的明确提示。在这种情况下,请尝试使用旧的L标志,它可能可以相同地工作,尽管这在一定程度上取决于您的设置。

此规则将在http服务器的主机配置或动态配置文件(“ .htaccess”)中同样起作用。如果您有权访问http服务器的主机配置,则根本不应该使用动态配置文件,因为动态配置文件有很多缺点。它们仅提供给那些真正廉价的托管服务提供商的人,作为进行微调的最后选择。