2017-08-10 59 views
0

我有这样的代码:简单的.htaccess重写规则返回“未找到”的问题

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

它应该做两件事情:

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

未找到

请求的URL /referral/[email protected]此服务器上未找到。

的Apache/2.4.7(Ubuntu的)在端口443

服务器

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

回答

1

观看其他相关问题后(特别是this one),我终于得到它通过添加以下行的工作:

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

RewriteRule图案(即^referral/([0-9]+)/?$)不匹配的形式是 “与referral/[email protected]结尾的地址” 的URL。对于那些你需要像下面这样来代替:

RewriteRule ^referral/([[email protected]]+)$ /referral.php?code=$1 [L] 

这假设URL的电子邮件地址“结尾”,但在其他方面完整的URL。正则表达式[0-9]+只能匹配数字,而不是电子邮件地址(字母,数字,“@”,“。”等),您似乎需要。

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

+0

还是同样的错误。你的代码更有意义。你对整个网址是正确的。 – Maleka

+1

请求“example.com/referral.php?code = test @ email.com'是否有效?你的'.htaccess'文件中是否有其他指令? – MrWhite

+0

example.com/[email protected]工作正常,htaccess包含只是选项 - 索引 选项+ FollowSymlinks RewriteEngine on RewriteRule referral /([a-zA-Z0-9。@ - ] + )$ /referral.php?code=$1 [L] – Maleka