我有这个简单的htaccess文件应该将每个请求带到index.php?site =
问题是,当htaccess的文件夹中有文件(如test.php)且url是domain.com/test时,它会抛出标准的“404 not found”错误。
我该如何解决这个问题?
content
谢谢!
答案 0 :(得分:0)
你所要做的就是
RewriteEngine On
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule ^(.*)$ index.php?site=$1 [QSA,L]
删除
RewriteBase /
否则,它将重定向到您的根文件夹。
例如:
- 如果目录路径为 c:/ {app} / {htdocs | www} / project /
- 然后 http://127.0.0.1/project/
即可访问- 您想要将 http://127.0.0.1/project/abc 重定向到 的 http://127.0.0.1/project/index.php?site=abc 强>
但是当您添加
RewriteBase /
时,它会重定向到 http://127.0.0.1/index.php?site=abc ,请将其删除
答案 1 :(得分:0)
对于2019年来到这里的人们,我遇到了同样的问题。 原因是来自Apache的Mod协商,当启用多视图时,行为如下:
如果服务器收到对/ some / dir / foo的请求并且/ some / dir / foo不存在,则服务器读取目录以查找所有名为foo。*的文件,并有效地伪造了一个类型映射,该类型映射命名所有这些文件,为其分配相同的媒体类型和内容编码(如果客户端按名称请求其中之一)。然后,它选择最符合客户要求的匹配项,并返回该文档。
http://httpd.apache.org/docs/2.4/mod/mod_negotiation.html#multiviews
您可以按照以下步骤在.htaccess中禁用多视图选项:
Options -MultiViews
或者在您的apache配置文件中(如果已授予):
<Directory "/var/www/"> Options Indexes FollowSymLinks AllowOverride All Require all granted </Directory>