编辑:
感谢Anubhava,以下是htaccess中的重写:
RewriteEngine On
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteCond %{REQUEST_FILENAME} !-l
RewriteRule ^([w_|-]+)$ main.php?u=$1 [L,QSA]
它的作用:它占用mysite.com/tatata并将其发送到main.php?u=塔塔
这很好用。然而,当我尝试使用mysite.com/cc时,它会给我403个禁止的错误。我试着看看是否有一些隐藏的.cc文件夹,不,我的网站中没有/cc。我试过了,/a和/aa,因为我认为我可能把重写搞砸了,至少需要3个字母。这两个都重写正确。
那么是什么导致了这种行为呢。我想我在重写函数的方式上遗漏了一些东西。
-----编辑更多----
为了看看会发生什么,我补充道:
RewriteRule ^([w_|-]+)/$ main.php?u=$1 [L,QSA]
现在它使用/admin/(一个实际的目录(并输出/main.php?u=管理员但是使用/cc/或/cc。。。仍然是同样的问题。
这种情况发生在由两个不同的人设置的两台机器上。
将您的规则替换为:
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteCond %{REQUEST_FILENAME} !-l
RewriteRule ^([w_|-]+)$ main.php?u=$1 [L,QSA]
在正则表达式中,连字符必须是方括号中的第一个或最后一个,否则它将用于范围表示。