Apache 只有一些规则适用于测试环境,所有规则都适用于live
我一直在更新几年前制作的网站。我最近从一个windows测试环境(在这方面工作得非常好,没有问题)转到了ubuntu 16.04。在这里有多年的工作经验。这是一个非常奇怪的问题,我不知道如何解决它 我缩短了htaccess的访问时间,只是为了向您展示哪些有效,哪些无效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
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]