Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/239.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/logging/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
.htaccess从根目录重定向到PHP脚本_Php_.htaccess_Redirect - Fatal编程技术网

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

.htaccess从根目录重定向到PHP脚本,php,.htaccess,redirect,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 您将实际看到此地址,但执行的脚本及其

我正在制作一个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示例文件,但没有一个像预期的那样工作。你有什么建议给我吗?非常感谢。

使用mod_rewrite,您可以将传入的请求转换为服务器上的资源。首先确保服务器上已启用mod_重写,并且您具有AllowOverride权限。如果尚未重新启动Apache,则可能需要重新启动

之后,您需要使用以下命令启用重写:

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

在您的例子中,我们希望匹配
index.php
,并将其重写为
dir/project.php
。因为我们不改变查询字符串,所以我们不必对它做任何事情。原始查询字符串将附加到重写的请求中。它将如下所示:

RewriteRule ^index\.php$ dir/project.php [L]
我们在index.php中转义了点,因为它是一个正则表达式。正则表达式中的点匹配任何字符,我们只希望它匹配文字点
[L]
是一个通知Apache停止这轮重写的标志。通常情况下,在您的规则后面有这样的规则是很好的,除非您有一个特定的规则为什么希望Apache继续重写


这样,您的规则现在应该可以按预期工作了。有关mod_rewrite的更多基本信息,请参见mod_rewrite标签,以及。

为什么要使用htaccess?您也可以通过简单的php代码实现它。我不想重定向到确切的脚本路径,我想故意隐藏它。所以,如果你的意思是改变标题,这不是一个选项。我不认为包含文件是个好主意,因为根据我的经验,它会导致相对路径出现问题。。。