Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/.htaccess/6.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Apache Mod Rewrite未按预期工作_Apache_.htaccess - Fatal编程技术网

Apache Mod Rewrite未按预期工作

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=

编辑:

感谢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=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内容,因此很可能是一些外部因素。是的,我同意目前的情况,这可能是非常奇怪的行为,但我相信在某个时候您会找到根本原因。