htaccess在localhost中工作,但在EC2实例中不起作用

Yus*_*kan 14 apache .htaccess mod-rewrite amazon-ec2 amazon-web-services

我的htaccess文件在localhost上工作,但在将其部署到EC2实例时不起作用.

我正在使用Macbook,在查找器中我看不到htaccess文件,我想也许它没有被复制到EC2实例但我不认为这是问题因为当我复制项目时我可以看到htaccess文件在我的编辑器中.

在EC2 linux实例中是否有一些启用mod重写的东西?如果有,我没有这样做或它默认启用mod重写?

RewriteEngine on
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule ^(.*)$ /index.php/$1 [L]
Run Code Online (Sandbox Code Playgroud)

use*_*567 54

我拼凑了各种帖子中的一些信息,所以我想我会回答一下.

  1. 正如Paul所评论的,如果您正在运行Amazon EC2 Linux,那么您可能正在运行httpd而不是Apache.因此文件在/etc/httpd/conf/httpd.conf
  2. 您必须以root用户身份更改文件.(从SSH访问)操作方式:sudo vim /etc/httpd/conf/httpd.conf(如何编辑在Amazon EC2上的httpd.conf文件)
  3. DocumentRoot "/var/www/html"我被列在两个地方.我不得不在随后更改AllowOverride NoneAllowOverride All那些两个地方.
  4. 重启apache.我重新启动了我的整个ec2实例(我已经配置apache自动启动)虽然只是重新启动apache应该工作.但我看到改变正在发挥作用.

我试图在.htaccess文件中进行相同的更改(从代码点火器应用程序中的url中删除index.php).希望能帮助到你!

  • 您无需重新启动整个实例,只需重新启动httpd即可.您可以通过命令行使用/ sbin/service httpd restart来完成此操作 (4认同)
  • 现在距离这个答案已经过去 5 年了。像我这样的人仍然在寻找解决方案。让您想知道为什么这些信息如此难以找到。 (2认同)
  • 真的很有帮助,但是必须重新启动 httpd,为此`sudo service httpd restart` (2认同)

小智 8

默认情况下,EC2没有启用.htaccess,您必须编辑httpd.config以允许它.

在/ etc/apache/sites-available/default中将AllowOverRide = None更改为AllowOverRide = All.

  • 如果您正在运行Amazon EC2 Linux,那么您可能正在运行httpd而不是Apache.因此该文件位于`/ etc/httpd/conf/httpd.conf`中 - 请务必同时修改`<Directory"/ var/www">`和`<Directory"/ var/www/html">` (4认同)