简单的 .htaccess 重写规则返回"未找到"问题



我有这个代码:

Options -Indexes
Options +FollowSymlinks
RewriteEngine on
RewriteRule ^referral/([0-9]+)/?$ /referral.php?code=$1 [NC,L]

它应该做两件事:

  • 阻止对文件夹内容的访问
  • 修改以referral/test@email.com结尾的 URL 以referral.php?code=test@email.com

已经尝试了不同的格式,但出现了相同的错误:

未找到

在此服务器上找不到请求的 URL/引用/test@email.com。

Apache/2.4.7 (Ubuntu( Server at Port 443

第一行代码单独工作正常。

RewriteRule ^referral/([0-9]+)/?$ /referral.php?code=$1 [NC,L]
RewriteRule

模式(即。^referral/([0-9]+)/?$( 与"以referral/test@email.com结尾的地址"形式的 URL 不匹配。为此,您需要以下内容:

RewriteRule ^referral/([a-zA-Z0-9.@-]+)$ /referral.php?code=$1 [L]

这假设 URL 以电子邮件地址"结尾",但否则就是完整的 URL。正则表达式[0-9]+仅匹配数字,而不匹配您似乎需要的电子邮件地址(字母、数字、"@"、"."等(。

我还删除了NC标志并将不区分大小写合并到正则表达式中,因为我假设只有电子邮件地址可以混合大小写,而不是 URL 路径?

在查看了其他相关问题(尤其是这个问题(后,我终于通过添加以下行来使其正常工作:

Options -MultiViews

最新更新