2016-08-23 164 views
2

我刚刚开始使用URL重写进行播放,我观看/阅读了一些教程,但是我仍然没有真正了解重写的工作原理。htaccess在本地主机上不工作

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

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

在我的.htaccess文件我有以下几点:

Options +FollowSymLinks 
RewriteEngine On 

RewriteRule ^index?$ index.php 

这是行不通的。我试过刷新页面,我检查了httpd.conf文件已选中AllowOverride All。 我已经阅读了一些教程,我认为我以正确的方式做到了这一点,但看起来我没有这样做。我的文件有什么问题?

回答

1

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

RewriteRule ^index?$ index.php 

RewriteRule实际上做相反的...它/index重写(或/inde因为你所做的最后x可选购)index.php 。请注意,这是内部重写,而不是外部重定向。您的RewriteRule接近您可能想要做的。这使您可以链接到/index(在您的应用程序中)并仍然服务于实际的/index.php文件。


采取这一一步......假设你有一个接触文档中的文档根被称为“接触最monster.php” - 这是对你的文件系统的物理文件。但是您想使用简单的URL /contact来访问此文档 - 这是您在整个应用程序中使用的URL。你不想让任何用户看到文件名“contact-the-monster.php”。然后在你的根.htaccess文件,你需要内部重写/contact所有请求/contact-the-monster.php,是这样的:

RewriteRule ^contact$ contact-the-monster.php [L] 

包含在LLAST)标志,因为你可能不需要做别的事。


确保MultiViews未启用。这可以在.htaccess使用Options指令禁用:

Options +FollowSymLinks -MultiViews 

MultiViews可以与mod_rewrite的冲突产生意想不到的效果。特别是当你的URL映射到文件减去文件扩展名。

+0

所以它应该看起来像这样? RewriteRule^index index.php – davidb

+0

虽然我会在模式中添加一个字符串锚点('$')的结尾,但这样可以。即。 'RewriteRule^index $ index.php'。否则它会匹配'/ index-anything'。你必须小心重写/重定向循环,尽管在这个例子中你应该没问题。我用另一个例子更新了我的答案。 – MrWhite

+0

我试过了你给我看的方式。我也检查了一些其他教程,它仍然无法正常工作。 我写这 重写规则^指数的index.php [NC,L] 重写规则^轮廓/([0-9A-ZA-Z] +)profile.php?用户名= $ 1 [NC] 这些都不两项工作。 htaccess文件应该位于根目录(我的所有.php和.html文件都在这里),这是正确的吗? – davidb

0

其实我已经面临同样的问题,并认为根本没有解决方案可以帮助,但我发现这个小小的代码行使了魔法。

Options +FollowSymLinks -MultiViews 

它添加到您的.htaccess文件的第一行,一切都应该像一个魅力。感谢分享。

相关问题