.htaccess从root目录重定向到PHP脚本

时间:2015-04-16 16:20:21

标签: php .htaccess redirect

我正在制作一个PHP项目,该项目已经在线,并且放在:

www.mypage.com/dir/project.php

最有可能的是,它看起来像:

www.mypage.com/dir/project.php?s=site&i=1&j=2&k=3

我为此感到高兴。但是,现在我还想从

重定向它
www.mypage.com/index.php

所以,如果你输入:

www.mypage.com/index.php?s=something&i=fee

您实际上会看到此地址,但已执行的脚本及其效果将来自:

www.mypage.com/dir/project.php?s=something&i=fee

我尝试了很多.htaccess示例文件但没有人按预期工作。你有什么提示吗?非常感谢你。

1 个答案:

答案 0 :(得分:1)

使用mod_rewrite,您可以将传入请求转换为服务器上的资源。首先确保在服务器上启用了mod_rewrite,并且您具有AllowOverride权限。如果您还没有这样做,可能需要重新启动Apache。

之后你需要使用以下方式打开重写:

RewriteEngine on

您的.htaccess文件位于您的http根目录中,因此您的规则将与此相关。 RewriteRule的第一个参数将匹配域+前缀之后和查询字符串之前的任何内容。在http://example.com/asdf?q=1中,http://example.com是域名,/是前缀,asdf是匹配的内容,q=1可以使用{{%{QUERY_STRING}通过条件进行匹配1}}

在您的情况下,我们希望匹配index.php并将其重写为dir/project.php。由于我们不更改查询字符串,因此我们不必对其执行任何操作。原始查询字符串将附加到重写的请求。它看起来像这样:

RewriteRule ^index\.php$ dir/project.php [L]

我们在index.php中转义了点,因为它是一个正则表达式。正则表达式中的点匹配任何字符,我们只希望它匹配文字点。 [L]是一个标志,告诉Apache停止这一轮重写。除非你有一个特定的规则,为什么你希望Apache继续重写,否则让你的规则落后于你的规则往往是好的。

这样,您的规则现在应该按预期工作。有关mod_rewrite标记以及in the tag wiki的更多基本信息可以找到in the official documentation