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
在 apache localhost 服务器上使用 .htaccess 文件
htaccess 规则以在访问 http://localhost 时提供 index.php 而不是 index.html