【问题标题】:htaccess works in localhost but doesn't work in EC2 instancehtaccess 在 localhost 中有效,但在 EC2 实例中无效
【发布时间】:2013-10-24 20:36:28
【问题描述】:

我的 htaccess 文件在本地主机上工作,但在我将它部署到 EC2 实例时不起作用。

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

在 EC2 linux 实例中是否有启用 mod 重写的功能?如果有,我没有这样做,或者它默认启用了 mod 重写?

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

【问题讨论】:

  • 仅供参考 - 您可以通过运行此终端命令并重新启动 Finder 在 OS X 中显示不可见文件。 defaults write com.apple.finder AppleShowAllFiles YES.

标签: apache .htaccess mod-rewrite amazon-web-services amazon-ec2


【解决方案1】:

我从各种帖子中拼凑了一些信息,所以我想我会提出一个答案。

  1. 正如 Paul 评论的那样,如果您运行的是 Amazon EC2 Linux,那么您可能运行的是 httpd 而不是 Apache。因此该文件位于/etc/httpd/conf/httpd.conf
  2. 您必须以 root 用户身份更改文件。 (通过 ssh 访问)这样做:sudo vim /etc/httpd/conf/httpd.conf (How to edit httpd.conf file in AMAZON EC2)
  3. DocumentRoot "/var/www/html" 为我列在两个地方。我不得不在这两个地方将随后的AllowOverride None 更改为AllowOverride All
  4. 重新启动 Apache。我重新启动了我的整个 ec2 实例(我将 apache 配置为自动启动),尽管重新启动 apache 应该可以工作。但我发现改变正在奏效。

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

【讨论】:

  • 非常感谢您。对于其他人:必须从 AWS 重启 EC2 实例
  • 不需要重启整个实例,重启httpd即可。您可以通过命令行使用 /sbin/service httpd restart 执行此操作
  • 非常感谢。
  • 这个答案发布 5 年后。像我这样的人仍然认为它是解决方案。让您想知道为什么这些信息如此难以找到。
  • 确实有帮助,但是必须重启 httpd,这样做sudo service httpd restart
【解决方案2】:

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

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

【讨论】:

  • 是的,它们是隐藏的,但是当我复制文件夹时,隐藏文件丢失了吗?所以,我试图理解问题是我无法将我的 .htaccess 文件复制到服务器。
  • 您是否尝试过简单地将 .htaccess 的内容复制到远程服务器上的 .htaccess 中?
  • 我正在使用 Amazon EC2 Linux 实例,但我不知道该怎么做。除了我复制之外,服务器中是否还有其他 .htaccess 文件?
  • 如果您运行的是 Amazon EC2 Linux,那么您可能运行的是 httpd 而不是 Apache。因此,该文件位于 /etc/httpd/conf/httpd.conf 中 - 请务必酌情修改 <Directory "/var/www"><Directory "/var/www/html">
【解决方案3】:

这是一个三步过程

  1. 配置 apache mod_rewrite,在终端中运行。 sudo a2enmod 重写

  2. 将以下代码添加到 /etc/apache2/sites-available/default

DocumentRoot /var/www
<Directory />
Options FollowSymLinks
AllowOverride All
</Directory>
<Directory /var/www/>
Options Indexes FollowSymLinks MultiViews
AllowOverride All
Order allow,deny
allow from all
</Directory>

3.重启apache

/etc/init.d/apache2 restart

【讨论】:

    【解决方案4】:

    分为三个步骤

    1. 配置 apache mod_rewrite,在终端中运行。 sudo a2enmod 重写

    2. 关闭VirtualHost标签/etc/apache2/sites-available/000-default.conf后在这个文件中添加这段代码

      DocumentRoot /var/www
      选项 FollowSymLinks
      允许覆盖所有
      选项索引 FollowSymLinks MultiViews
      允许覆盖全部
      订单允许,拒绝
      全部允许

    3. 通过命令重启apache服务器

      sudo service apache2 重启

    【讨论】:

      【解决方案5】:

      当你使用 apache2 服务器时

      转到以下目录。

      cd /etc/apache2/sites-available

      如果你在这里使用 LS 命令你会看到下面的文件。

      000-default.conf

      这是具有默认 apache 配置的文件,应用于 /var/www/html 文件夹中的站点。

      打开此文件进行编辑。

      sudo nano 000-default.conf

      在 DocumentRoot /var/www/html 行之后添加以下行。

      Options FollowSymLinks AllowOverride All Options Indexes FollowSymLinks MultiViews AllowOverride All Order allow,deny allow from all
      

      保存文件并重新启动 apache。

      sudo service apache2 重启

      就是这样,现在您的 .htaccess 文件可以工作了

      【讨论】:

      • 这导致 apache 崩溃。
      【解决方案6】:

      在 Linux 环境下 1 - cd /etc/apache2/sites-available

      2 - sudo nano 000-default.conf

      并粘贴此代码:

      <Directory "/var/www/html">
          Order allow,deny
          Allow from all
          Options None
          AllowOverride All
      </Directory>
      

      这适用于 AWS 实例。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2023-03-22
        • 2017-12-29
        • 2012-04-21
        • 1970-01-01
        • 1970-01-01
        • 2018-12-03
        • 2021-11-02
        • 1970-01-01
        相关资源
        最近更新 更多