我正在制作一个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示例文件但没有人按预期工作。你有什么提示吗?非常感谢你。
答案 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。