我今天刚刚开始使用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
。
我已经阅读了一些教程,我认为我这样做是正确的,但似乎我没有。我的文件出了什么问题?
答案 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文件应立即执行。