htaccess 在 localhost 中有效,但在 EC2 实例中无效

Posted

技术标签:

【中文标题】htaccess 在 localhost 中有效,但在 EC2 实例中无效【英文标题】:htaccess works in localhost but doesn't work in EC2 instance 【发布时间】: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. 【参考方案1】:

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

    正如 Paul 评论的那样,如果您运行的是 Amazon EC2 Linux,那么您可能运行的是 httpd 而不是 Apache。因此该文件位于/etc/httpd/conf/httpd.conf 您必须以 root 用户身份更改文件。 (通过 ssh 访问)这样做:sudo vim /etc/httpd/conf/httpd.conf (How to edit httpd.conf file in AMAZON EC2) DocumentRoot "/var/www/html" 为我列在两个地方。我不得不在这两个地方将随后的AllowOverride None 更改为AllowOverride All。 重新启动 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】:

这是一个三步过程

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

    将以下代码添加到 /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】:

分为三个步骤

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

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

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

    通过命令重启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 实例。

【讨论】:

以上是关于htaccess 在 localhost 中有效,但在 EC2 实例中无效的主要内容,如果未能解决你的问题,请参考以下文章

.htaccess 用于重定向到 localhost 项目根目录

使用.htaccess在Localhost上的WordPress

无法在 .htaccess 中正确重写和重定向 url

在 apache localhost 服务器上使用 .htaccess 文件

htaccess 规则以在访问 http://localhost 时提供 index.php 而不是 index.html

.htaccess 在 Xampp localhost 服务器上不起作用