使用htaccess和php处理页面视图



目前我正在添加以下url参数:

www.somesite.com/?page_type=view

我的php脚本使用它来确定加载哪个页面视图:

if (isset($_GET['page_type'])) {
    $page_type = $_GET['page_type'];
    $this->pageType($page_type);
} else {
    $this->home();
}

我希望能够使用以下url来实现同样的事情:

www.somesite.com/view

所以我需要将所有请求重定向到index.php,同时保持原始的url输入。

那么我可以直接使用

$_SERVER['REQUEST_URI']

获取页面视图的名称。

寻找一些htaccess建议,

提前感谢!

你可以这样写:

<IfModule mod_rewrite.c>
RewriteEngine On
#RewriteBase /
RewriteCond %{REQUEST_FILENAME} !-d
RewriteCond %{REQUEST_FILENAME} !-f
RewriteRule ^(.*)$ /index.php?url=$1 [QSA,L]
</IfModule>

这将重定向所有不解析到实际文件/目录的请求到您的index.php?url=$1将包含请求,但在您的情况下,这可能是可选的,因为您仍然可以从$_SERVER['REQUEST_URI']中获取它。

我在那里留下了一个RewriteBase行(注释掉),因为取消注释可以帮助服务器设置。

另一个选择是简单地设置htaccess文件,将任何404(无法解析的)请求重定向到索引文件,并设置如下标志:

RewriteEngine on
RewriteBase /
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule . index.php?sef_rewrite=1 [L,QSA]

从这里你可以使用PHP访问$_SERVER['REQUEST_URI']信息来解析PHP中的内容,并根据需要手动将变量推送到$_REQUEST超全局变量中,以"映射"你的搜索引擎友好链接到应用程序中。

这比简单地在所有url上强制使用/pagetypevar格式提供了更多的可伸缩性。

当您想要将页面嵌套到子类别中时会发生什么?/信息/about_us/信息/contact_us如果您想在url中存储其他变量,如每页项或分页,会发生什么?/产品/1 _my_supercool_item/产品/2 _another_item

使用一个系统将所有未解析的请求重定向到应用程序框架中,并允许应用程序框架重新映射url,将为您提供最大的控制和最大的可伸缩性。

使用这样的重写规则:

RewriteEngine On
RewriteRule /(home|view) index.php?page_type=$1
RewriteEngine On
RewriteCond %{REQUEST_FILENAME} !-d
RewriteCond %{REQUEST_FILENAME} !-f
RewriteRule /^(.*)$ /index.php?page_type=$1 [L]

最新更新