是什么意思^([a-zA-Z0-9 _-] +)$ profile.php?u = $ 1 an it ^([a-zA-Z0-9 _-] +)/ $ profile.php?u = $ 1吗?

时间:2016-04-08 19:14:30

标签: php regex .htaccess

目前我正在开发一个用户互动的网站。我可以使用具有以下命令的.htaccess文件转换配置文件页面链接中的所有用户名:

RewriteEngine on
RewriteRule ^([a-zA-Z0-9_-]+)$ profile.php?u=$1
RewriteRule ^([a-zA-Z0-9_-]+)/$ profile.php?u=$1

如果我理解正确,这段代码会替换" profile.php"对于信号之后的争论"?"如果URL匹配正则表达式。但我并不了解" u = $ 1"完成那个因为" u"不是变量会话。这是我在PHP中为会话变量配置的:

$_SESSION["id"] = $id;
$_SESSION["username"] = $username;
$_SESSION["password"] = $pswd;
$_SESSION["email"] = $email;

我想在正则表达式中包含太多空格,因为目前只有用户名如" FirstUser"被接受,用户名如" First User"在浏览器中给我一个错误。

当我在模式中添加空格时,我收到以下HTTP 500错误:

Server Error

1 个答案:

答案 0 :(得分:0)

您的.htaccess配置

RewriteEngine on
RewriteRule ^([a-zA-Z0-9_-]+)$ profile.php?u=$1
RewriteRule ^([a-zA-Z0-9_-]+)/$ profile.php?u=$1

尝试加载rewrite engine,这可能是不允许的(先检查此部分!)然后(如果成功)将在.htaccess文件下进行匹配#39; s结构并使用变量profile.php将HTTP u请求转换为.htaccess,并将其设置为等于该子路径的值。

因此,如果/home/kasbah/public_html文件位于http://foobar/~kasbah且与http://foobar/~kasbah/it-works相对应,那么当用户转到http://foobar/~kasbah/profile.php?u=it-works时,它们将被重定向到/

然后,您的PHP代码可以调用GET之类的内容来处理该变量。

$_GET['u']。您还可以将最终RewriteRule作为可选项,并且只有一个RewriteEngine on RewriteRule ^((?:[a-zA-Z0-9_-]|%20)+)/?$ profile.php?u=$1

BOOT_CLOJURE_VERSION