简单的.htaccess重写规则返回' Not Found'问题

时间:2017-08-10 16:57:23

标签: apache .htaccess mod-rewrite

我有这段代码:

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

应该做两件事:

  • 阻止访问文件夹'含量
  • 修改以referral/test@email.comreferral.php?code=test@email.com结尾的网址。

尝试了不同的格式,但出现了同样的错误:

  

未找到

     

在此服务器上找不到请求的网址/referral/test@email.com。

     

端口443上的Apache / 2.4.7(Ubuntu)服务器

第一行代码很好。

1 个答案:

答案 0 :(得分:3)

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

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

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

这假定URL“以”结束“电子邮件地址,但这是完整的URL。正则表达式[0-9]+仅匹配您似乎需要的数字,而不是电子邮件地址(字母,数字,“@”,“。”等)。

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