完全重写URL以显示文件夹中的文件,而不是根目录中的页面


.htaccess Completely rewrite URL to show file in a folder, rather than page in root

那么,我有了当前的文件结构:

ROOT
    -> /public
        -> /user_views
            user_handle.php
            user_profile.php
            user_feed.php
            user_settings.php
    .htaccess

如您所见,文件夹user_views包含客户端可能想要查看的一些可能的视图。我想要的,是为客户端插入URL http://example.com/user/被定向到页面user_handle.php。这个handle将作为所有/user/页面的根文件,并且它将相应地通过许多$_GET请求拆分为这些页面。

到目前为止,我有以下。htaccess,但它不工作…

RewriteRule ^user/ user_views/user_handle.php [L]

我能做些什么来让这个工作,使url http://example.com/user重定向到user_views文件夹中的user_handle文件?

谢谢!

我不确定我完全理解你的问题,但似乎你想让位于public/user_views下的user_handle.php作为你其余PHP文件的"路由器",并让所有请求/user/(例如/user/?page=1)由user_handle.php处理。

如果是这样的话,你的规则似乎是合法的。我注意到的唯一一件事(我可能错了)是你的.htaccess位于public文件夹之外。在这种情况下,你需要把'public/'作为你的规则的一部分。

我重新创建了你描述的文件夹/文件结构,它已经为我工作使用以下。htaccess:

<IfModule mod_rewrite.c>
RewriteEngine On
RewriteRule ^user/ public/user_views/user_handle.php [L]
</IfModule>

很有可能这是问题,但您也可能想要再次检查mod_rewrite,这是基于规则的重写引擎,在您的服务器/本地环境上启用。当你在任何PHP文件中调用phpinfo()时,它应该显示在'Loaded modules'下。