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 只有一些规则适用于测试环境,所有规则都适用于live_Apache_.htaccess_Mod Rewrite - Fatal编程技术网

Apache 只有一些规则适用于测试环境,所有规则都适用于live

Apache 只有一些规则适用于测试环境,所有规则都适用于live,apache,.htaccess,mod-rewrite,Apache,.htaccess,Mod Rewrite,我一直在更新几年前制作的网站。我最近从一个windows测试环境(在这方面工作得非常好,没有问题)转到了ubuntu 16.04。在这里有多年的工作经验。这是一个非常奇怪的问题,我不知道如何解决它 我缩短了htaccess的访问时间,只是为了向您展示哪些有效,哪些无效 RewriteEngine on RewriteCond %{REQUEST_FILENAME} !-f RewriteRule ^admin/([^/]*)/? /admin.php?p=$1 [QSA,L] Rewrite

我一直在更新几年前制作的网站。我最近从一个windows测试环境(在这方面工作得非常好,没有问题)转到了ubuntu 16.04。在这里有多年的工作经验。这是一个非常奇怪的问题,我不知道如何解决它

我缩短了htaccess的访问时间,只是为了向您展示哪些有效,哪些无效

RewriteEngine on

RewriteCond %{REQUEST_FILENAME} !-f
RewriteRule ^admin/([^/]*)/? /admin.php?p=$1 [QSA,L]

RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_URI} !^/?(img)
RewriteRule ^([^\.]+)$ /media.php?i=$1 [NC,L,QSA]
所以。在我的windows test env和live server上,最上面的规则运行得非常好,但在我的新开发环境中,似乎只有最下面的规则适用。如果我尝试请求localhost/admin/short,它会给我404。如果我请求的url不是以“admin”开头的,不是请求img目录,也不是存在的文件,那么重写会像应该的那样将其发送到media.php

应该发生的是localhost/admin/short=>localhost/admin.php?p=short

没有线索。我想可能是区分大小写之类的,但不是所有的php文件都是小写的。有人有什么想法吗?我能提供什么信息

所以我在这里不知所措。其他不起作用的事情包括

RewriteCond %{REQUEST_FILENAME} !-d
RewriteCond %{REQUEST_FILENAME}.php -f
RewriteRule ^(.*?)/?$ $1.php [L]
我的意图:localhost/upload=>localhost/upload.php

可能是文件权限问题吗?这就是它看起来的样子:

-rw-rw-r--  1 www-data www-data  10113 Nov 13 15:23 admin.php
-rw-rw-r--  1 www-data www-data   2796 Nov 13 14:07 index.php
-rw-rw-r--  1 www-data www-data   3664 Nov 13 11:49 media.php
-rw-r--r--  1 root     www-data    261 Dec 20 23:57 .htaccess
我发现一个答案是:

事实证明,
/etc/apache2/sites enabled/000默认值
允许覆盖所有
,但是
/etc/apache2/apache2.conf也有
使用
AllowOverwrite None
为我们的网站
目录
创建相同的条目。所以 一定要检查两个地方

我换了,但还是没用

奇怪的是,如果我把我的重写信息放在apache2.conf中,它就会工作 像这样


重新启动发动机
... 等

您的规则可能会更好:

RewriteEngine on
RewriteCond %{REQUEST_FILENAME} -f
RewriteRule ^ - [END]
RewriteRule ^admin/([^/]*) admin.php?p=$1 [NS,QSA,DPI,END]
RewriteRule ^(?!img/)[^\.]+$ media.php?i=$0 [NS,QSA,DPI,END]

选项索引遵循ymlinks

只是为了确保:所有内容都在web根目录中运行,而不是在子目录中运行?你提供的规则似乎对我很有效。也就是说,如果你正在重写你的站点,使用基于PHP的路由器可能是个好主意。主页是/var/www/html/index.php在我自发决定使用它之前,我所做的最后一件事是明确告诉apache2.conf允许在/var/www/html上使用Overrides(尽管它在/var/www中有说明)。我重启了,它成功了。所以我试着删除它,但它仍然有效,很高兴你能工作-我最好的猜测是与顺序有关-例如,如果你的媒体重写发生在你的upload->upload.php重写之前,那么它就不起作用了。好吧,我使用的是与live相同的htaccess,可能
Options+FollowSymLinks-多视图
有帮助。在我的配置文件中,我在ymlinks MultiViews后面有
选项索引,直到我在htaccess上添加了那一行,它才起作用。虽然我以前试过,但似乎没什么不同。
RewriteEngine on
RewriteCond %{REQUEST_FILENAME} -f
RewriteRule ^ - [END]
RewriteRule ^admin/([^/]*) admin.php?p=$1 [NS,QSA,DPI,END]
RewriteRule ^(?!img/)[^\.]+$ media.php?i=$0 [NS,QSA,DPI,END]