Apache mod_rewrite:^([A-Za-z \ /] +)$和^(。*)$之间的差异

时间:2016-01-18 09:10:52

标签: php apache .htaccess mod-rewrite

我真的不明白为什么我的.htaccess文件错误地使用^(.*)$ ... 这是我的.htaccess:

RewriteEngine On
RewriteRule ^(.*)$ index.php?alias=$1 [L]

我只想将我的主机地址后的所有文本放在名为"别名"的GET参数中。 结果是,在我的PHP脚本" index.php"中,$_GET['alias']将具有值" index.php"而是在我的主持人地址之后。 如果我改变我的.htaccess:

RewriteEngine On
RewriteRule ^([A-Za-z\/]+)$ index.php?alias=$1 [L]

我终于让$_GET['alias']拥有正确的价值。 例如,如果我请求http://myaddress.com/the-value-of-alias,则在第一种情况下,我将获得$_GET['alias'] = 'index.php'。在第二种情况下,我会get $_GET['alias'] = 'the-value-of-alias'。 那么有人可以解释一下^([A-Za-z\/]+)$^(.*)$之间有什么区别吗? 非常感谢你提前。 :)

2 个答案:

答案 0 :(得分:0)

当你输入。*它匹配任何网址,所以你最终进行递归重定向,而当你有特定的正则表达式元素时,它将工作,因为它只匹配你的第一个网址。它与目标网址不匹配,因为它中包含“等于”的符号

答案 1 :(得分:0)

^(.*)$表达式表示除点之外的任何内容。

至于表达式^([A-Za-z\/]+)$,它将获得从A到Z以及从a到z的字符