我想让page.php?title=foo
更改为/page/foo
。我已经将它工作到page.php转到/ page /,但是当我page.php?title=foo
时,它会将网址重写为/page/title?title=foo
。
我想删除最后一个网址的?title=foo
部分。有什么想法吗?
我是新手 - 我尝试按照教程,但不确定[OR]
和[NC]
(等)是什么意思。
RewriteEngine on
RewriteCond %{QUERY_STRING} ^$ [OR]
RewriteCond %{QUERY_STRING} ^title=(.*)$ [NC]
RewriteRule ^page.php$ page/%1 [NC,L,R=301]
答案 0 :(得分:1)
您可以这样做:
RewriteEngine on
RewriteRule page.php - [L]
RewriteRule ^page/(.*)$ page.php/?title=$1 // $1 - content of ()
因此,当用户询问http://example.com/page/foo
时,Apache会打开他http://example.com/page.php/?title=foo
。但是adressbar仍然使用http://example.com/page/foo
答案 1 :(得分:0)
对于我的所有开发者,我将所有请求转发给index.php
,我排除了所有css,js,jp(e)g,pdf,zip等。
<强>的.htaccess 强>
DirectoryIndex index.php
#ErrorDocument 404 /index.php?page=404
RewriteEngine on
RewriteCond %{REQUEST_URI} !\.(.+)$
RewriteRule ^(.*)([^/])$ http://%{HTTP_HOST}/$1$2/ [L,R=301]
RewriteCond %{REQUEST_URI} !\.(ico|docx|php|png|css|jpe?g|js|pdf|txt|mp3)$
RewriteRule ^(.*)$ index.php
然后在您的PHP启动代码中,
设置vars以提供内容并在以后使用$_GET
如果您需要....
例如:
<?php
function rewrite(){
$link = $_SERVER['REQUEST_URI'];
$params = array("base_url", "locale", "page", "action", "par1", "par2", "par3", "par4");
$extraParams = preg_match("/\?/i", $link, $extraParamsMatches);
if($extraParams){
$link = explode("?", $link);
$link = $link[0];
}
$link = explode("/", $link);
$i = 0;
$vals = array();
foreach($link as $key => $value){
if($params[$key] == "base_url") $value = $_SERVER['SERVER_NAME'];
//if(empty($value)) continue ;
$vals[$params[$key]] = $value;
if($i == sizeof($params)-1){
break;
}
$i++;
}
return $vals;
}
}
?>
重要强>
您可以编辑此代码以提高安全性,以便在使用之前获得SANITIZE数据示例;-)
如果在php或数据库中找不到所请求的页面,你可以发送header('Location : ',true, 404);
并给你的404页面!!