我在我的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]
答案 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]