Apache htaccess在重写规则中添加@或空格时导致500内部错误

Apache htaccess在重写规则中添加@或空格时导致500内部错误,apache,.htaccess,mod-rewrite,url-rewriting,Apache,.htaccess,Mod Rewrite,Url Rewriting,我的htaccess重写规则有问题,即当我添加空格或@symbol时,没有为档案页面提供404错误页面,这些页面之间包含空格,例如:www.domain.com/rahul kapoor或www.domain.com/rahul@gmail.com它给出了500个内部错误。 我的.htaccess是:- RewriteEngine On RewriteBase / RewriteCond %{HTTP_HOST} !^$ RewriteCond %{HTTP_HOST} !^www\. [NC

我的htaccess重写规则有问题,即当我添加空格或@symbol时,没有为档案页面提供404错误页面,这些页面之间包含空格,例如:www.domain.com/rahul kapoor或www.domain.com/rahul@gmail.com它给出了500个内部错误。 我的.htaccess是:-

RewriteEngine On
RewriteBase /

RewriteCond %{HTTP_HOST} !^$
RewriteCond %{HTTP_HOST} !^www\. [NC]
RewriteCond %{HTTPS}s ^on(s)|
RewriteRule ^ http%1://www.%{HTTP_HOST}%{REQUEST_URI} [R=301,L]

RewriteCond %{REQUEST_FILENAME} !-d 
RewriteCond %{REQUEST_FILENAME} !-f
RewriteRule ^([a-zA-Z0-9._-@ ]+)/?$ profile.php?u=$1 [L,QSA]

如果要使用空格,则需要引用规则的正则表达式。同样重要的是使用
NE
标志不编码

RewriteEngine On
RewriteBase /

RewriteCond %{HTTP_HOST} !^$
RewriteCond %{HTTP_HOST} !^www\. [NC]
RewriteCond %{HTTPS}s ^on(s)|
RewriteRule ^ http%1://www.%{HTTP_HOST}%{REQUEST_URI} [R=301,L]

RewriteCond %{REQUEST_FILENAME} !-d 
RewriteCond %{REQUEST_FILENAME} !-f
RewriteRule "^([-a-zA-Z0-9._@ ]+)/?$" profile.php?u=$1 [L,QSA,NE]
您可以将
\w
用于
[A-Za-z0-9\
,因此第二条规则将变为:

RewriteCond %{REQUEST_FILENAME} !-d 
RewriteCond %{REQUEST_FILENAME} !-f
RewriteRule "^([\w.@ -]+)/?$" profile.php?u=$1 [L,QSA,NE]

是的,它现在没有给出500个错误并显示配置文件页面,但它只显示页面,没有显示任何名称和数据库中的其他信息。知道为什么会发生这种情况吗?好的,请查看带有
NE
标志的更新答案。顺便问一下,您打开的原始URL是什么?它仍然不工作,您可以在这里看到它,这是因为您在
profile.php
中的代码。这条规则很有效。确保使用
$\u GET[“u”]
访问GET参数,我使用的是相同的,还有其他建议吗?