我正在使用AWS
构建应用程序。下面显示的是我正在使用的.htaccess
<IfModule mod_rewrite.c>
RewriteEngine On
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule ^(.*)$ index.php/$1 [L]
</IfModule>
使用此.htaccess
时出现以下错误,
如果未使用.htaccess
,则一切正常。非常感谢您提供有关如何解决此问题的指导。谢谢。
答案 0 :(得分:1)
该错误可能不是由于.htaccess引起的。您很可能没有正确设置服务器配置,并没有授予访问文件夹的权限。
在Apache Web服务器中,通常在配置的<Directory>
部分中设置该权限。这是一个通用示例。
<VirtualHost _default_:443>
ServerName example.com
DocumentRoot /var/www/example/htdocs
<Directory /var/www/example/htdocs>
AllowOverride All
Require all granted
RewriteEngine on
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule ^(.*)$ index.php?/$1 [L]
</Directory>
# many other directives too
</VirtualHost>
提供许可的指令是行Require all granted
。通常可以在/etc/apache2/sites-available
中存储的文件中找到以上内容。
请注意,您可以在服务器配置文件中使用RewriteEngine。实际上,那是最好的方法。仅当您无法自己编辑配置文件(即共享主机)时才应使用.htaccess
。但是,由于您使用的是AWS,因此您可以而且必须自己管理配置。一些读物很好地解释了为什么you should not use .htaccess。
“它在没有.htaccess的情况下工作”的行为可能是因为指令AllowOverride None
生效。该指令关闭了在目录上使用.htaccess
的功能。当您通过.htaccess
尝试“覆盖指令”时,权限将被拒绝。
另一个可能的问题是,拥有index.php
的文件夹没有正确的“所有权”,通常是通过变体找到的“ www-data:www-data”。
答案 1 :(得分:0)
编辑以下文件:
/etc/httpd/conf.d/vhost.conf
您将看到以下代码:
<Directory /var/www/html/foldername>
AllowOverride All
</Directory>
使用以下代码替换上面的代码:
<Directory /var/www/vhosts/foldername>
Options -FollowSymLinks +SymLinksIfOwnerMatch
AllowOverride All
Order deny,allow
Allow from all
</Directory>
注意:注意代码缩进,错误的缩进会导致错误。