htaccess无法在localhost上运行

时间:2016-08-23 20:54:01

标签: apache .htaccess mod-rewrite

我今天刚刚开始使用URL重写,我观看/阅读了一些教程,但我仍然没有真正理解这种重写方式。

我创建了一个.htaccess文件并将其放在我的根目录中。 我目前正在使用Apache工作在我的本地机器上。

我希望http://localhost:5216/index.php重定向到http://localhost:5216/index

在我的.htaccess文件中,我有以下内容:

Options +FollowSymLinks
RewriteEngine On

RewriteRule ^index?$ index.php

这不起作用。我尝试刷新页面,检查httpd.conf文件已选中AllowOverride All。 我已经阅读了一些教程,我认为我这样做是正确的,但似乎我没有。我的文件出了什么问题?

3 个答案:

答案 0 :(得分:0)

  

我希望http://localhost:5216/index.php重定向到http://localhost:5216/index

RewriteRule ^index?$ index.php

您的RewriteRule实际上正好相反......它会从/index(或/inde,因为您已将最后一个x可选)重写为{{1} }。请注意,这是内部重写,而不是外部重定向

您的index.php接近您可能想要做的事情。这样,您就可以链接到RewriteRule(在您的应用程序中)并仍然提供实际的/index文件。

更进一步......假设您在文档根目录中有一个名为“contact-the-monster.php”的联系人文档 - 这是您文件系统上的物理文件。但是您希望使用简单的URL /index.php来访问此文档 - 这是您在整个应用程序中使用的URL。您不希望任何用户看到文件名“contact-the-monster.php”。然后在您的根/contact文件中,您需要在内部重写.htaccess/contact的所有请求,例如:

/contact-the-monster.php

包含RewriteRule ^contact$ contact-the-monster.php [L] L)标记,因为您可能不需要执行任何其他操作。

确保未启用LAST。可以使用MultiViews指令在.htaccess中禁用此功能:

Options

Options +FollowSymLinks -MultiViews 可能会与mod_rewrite发生冲突,从而产生意外结果。特别是当您的URL映射到文件而不是文件扩展名时。

答案 1 :(得分:0)

实际上我遇到了同样的问题,并且认为根本没有任何解决方案可以提供帮助,但我发现这一小段代码可以产生魔力。

Options +FollowSymLinks -MultiViews

将它添加到.htaccess文件的第一行,所有内容都应该像魅力一样。谢谢分享。

答案 2 :(得分:0)

我遇到了同样的问题,我的解决方法是这个(请注意,我将Laragon与WAMP一起使用)。 它与单独的htaccess文件无关,由于Apache httpd.conf中的这一部分,它们都被忽略了:

DocumentRoot "D:/laragon/www"
<Directory "D:/laragon/www">
    Options Indexes FollowSymLinks Includes ExecCGI
    AllowOverride None
    Require all granted
</Directory>

因此,您需要找到httpd.conf并将AllowOverride None更改为AllowOverride All。您的.htaccess文件应立即执行。