我正在使用mod-rewrite将友好的URL重定向到php脚本,该脚本在关联数组中查找实际的URL,然后使用header重定向(“location:$ url”);
我的重写规则是
RewriteEngine On
RewriteCond %{REQUEST_URI} "^/$"
RewriteRule ^(.*) http://%{HTTP_HOST}/index.php [L,R=301]
RewriteCond %{REQUEST_URI} !=/home.php
RewriteCond %{REQUEST_URI} !(\.php|\.html|\.htm|\.png|\.gif|\.css|\.htm|\.js|\.txt|\.xml)$ [NC]
RewriteRule ^([^/]*)$ /home.php?page=$1 [L]
这会导致$ url出现在浏览器的位置栏中,而我希望显示友好的url。
我从这篇文章中了解Rewriting URL and making new URL show in location bar为什么会发生这种情况(因为php位置标题)但我不知道如何实现我的目标。
有很多动态页面由几个内部php脚本构建,并且为脚本和请求参数的所有组合编写mod-rewrite规则将很困难。
所以我的问题是,如何让友好的网址显示在位置栏中。
答案 0 :(得分:1)
在PHP脚本中,而不是使用
重定向用户 header("location: $page");
您需要包含该页面。您肯定希望首先确保$ page的值是可接受的值:
<?php
// /home.php
$page = $_GET['page'];
$valid_pages = array(
'about',
'contact',
);
if(in_array($page, $valid_pages)){
include($page . '.php');
exit;
}
die('Invalid Page.');
答案 1 :(得分:0)
我现在已经解决了。
包含对我不起作用,因为许多$页面的内容类型为“?a = b”。
我解决了它:
if(array_key_exists($page, $pages)){
$page = $pages[$page];
if (strpos($page,'?')) {
$html = file_get_contents(<site>.$page);
echo $html;
}
else include(<path>.$page);
exit;
}
die('Invalid Page.');
感谢泰勒指出我正确的方向。我接受了他的回答