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

时间:2014-01-03 13:57:59

标签: apache .htaccess mod-rewrite url-rewriting

我在我的htaccess重写规则中遇到问题,即当我添加空格或@符号时,不会为配置文件页面提供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]

1 个答案:

答案 0 :(得分:2)

如果要使用空格,则需要引用规则的正则表达式。同样重要的是使用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]