目前我正在添加以下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]