Apache Mod Rewrite未按预期工作
编辑: 感谢Anubhava,以下是htaccess中的重写:Apache Mod Rewrite未按预期工作,apache,.htaccess,Apache,.htaccess,编辑: 感谢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=
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=tatata
那很好用。
然而,当我尝试做mysite.com/cc时,它会给我403个禁止的错误。我试图查看是否有一些隐藏的.cc文件夹,不,我的站点中没有/cc。我试过,/a和/aa,因为我想我可能把重写搞砸了,至少需要3个字母。这两个都重写正确
那么是什么导致了这种行为呢。我猜我在重写函数的方式上遗漏了一些东西
-----编辑更多----
为了看看会发生什么,我补充道:
RewriteRule ^([\w_|-]+)\/$ main.php?u=$1 [L,QSA]
现在它接受/admin/(一个实际目录)并输出/main.php?u=admin
但是使用/cc/或/cc。。。还是一样的问题
这种情况发生在两台机器上,由两个不同的人设置 将规则替换为:
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteCond %{REQUEST_FILENAME} !-l
RewriteRule ^([\w_|-]+)$ main.php?u=$1 [L,QSA]
在正则表达式中,连字符必须是方括号中的第一个或最后一个,否则它将用于表示范围注意,但它并不能解决我遇到的/cc问题。只需对整个规则进行注释,然后查看其行为。我怀疑这个问题有外部玩家。如果你知道是什么原因导致/cc不能在两台不同的机器上工作,我愿意接受所有建议。我的意思是,我可以很容易地阻止它被链接,但是如果有其他像那样的断开的链接呢?从一台机器到另一台机器有很多事情可能会出错。我们只能在您提供更多信息的情况下进行调查:P您的.htaccess没有任何403内容,因此很可能是一些外部因素。是的,我同意目前的情况,这可能是非常奇怪的行为,但我相信在某个时候您会找到根本原因。