我有一个完全像这样的index.php
echo "<h2>index page</h2>";
$url=explode("/",$_SERVER['QUERY_STRING']);
echo "<pre>";
print_r($url);
print_r($_SERVER['QUERY_STRING']);
echo "</pre>";
和另一个在同一文件夹中的profile.php使用相同的代码
echo "<h2>profile page</h2>";
$url=explode("/",$_SERVER['QUERY_STRING']);
echo "<pre>";
print_r($url);
print_r($_SERVER['QUERY_STRING']);
echo "</pre>";
我正在尝试使用干净的url建立一个非常简单的路由系统。 当网址是这样的http://localhost/vas/aaa/bbb时 我从index.php得到以下结果,这是可以的:
索引页面 数组 ( [0] => aaa 1 => bbb ) aaa / bbb
但是,当我键入以下内容:http://localhost/vas/profile/john/21时,我将配置文件包含在url中,作为该URL的第一部分,我得到了:
个人资料页面 数组 ( [0] => )
这意味着无论我进行任何形式的路由,都运行profile.php,结果是一个空的url数组,没有-最重要的-预期参数,例如约翰/ 21。 为什么将路由作为功能嵌入在PHP 7. *中呢? 这是我的.htaccess文件:
RewriteCond %{REQUEST_FILENAME} !-d
RewriteCond %{REQUEST_FILENAME} !-f
RewriteRule ^(.*)$ index.php?$1 [QSA,L]
答案 0 :(得分:0)
我建议您使用 parse_url()函数以及将所有请求路由到Apache中的 index.php 的方式
RewriteEngine On
RewriteCond %{REQUEST_FILENAME} -s [OR]
RewriteCond %{REQUEST_FILENAME} -l [OR]
RewriteCond %{REQUEST_FILENAME} -d
RewriteRule ^.*$ - [NC,L]
RewriteRule ^.*$ index.php [NC,L]
答案 1 :(得分:0)
您当前的.htaccess的一些解释:
前两行设置了url重写的条件,在这种情况下,如果未在url中找到指定的文件夹或文件,它将被重写:
RewriteCond %{REQUEST_FILENAME} !-d
RewriteCond %{REQUEST_FILENAME} !-f
然后,重写规则指定所传递的URL应该作为查询字符串传输到index.php
:
RewriteRule ^(.*)$ index.php?$1 [QSA,L]
因此,如果您没有其他.htaccess规则,则在调用此URL http://localhost/vas/profile/john/21
时,您不应以profile.php
结尾,因为您没有在网址。您应该以网址作为参数以index.php
结尾。
但是,如果文件夹vas/profile/john/21/
实际上存在并且其中有一个index.php,则将调用该文件,但是由于重写将不适用,因此您将没有查询字符串。
这里可能还发生了其他事情,其他.htacces规则将/profile/
重定向到profile.php
或什么,这说明您可以正确访问此文件。额外的信息可能会有用。