0

我正在尝试page.php?title=foo更改为/page/foo. 我已经让它工作到 page.php 转到 /page/ 的地步,但是当我这样做时,page.php?title=foo它会将 url 重写为/page/title?title=foo.

我想删除?title=foo最后一个网址的一部分。有任何想法吗?

我对此很陌生-我尝试按照教程进行操作,但不确定[OR]and [NC](etc) 是什么意思。

RewriteEngine on
RewriteCond %{QUERY_STRING}     ^$              [OR]
RewriteCond %{QUERY_STRING}     ^title=(.*)$    [NC]
RewriteRule ^page.php$       page/%1      [NC,L,R=301] 
4

2 回答 2

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。但是地址栏还在http://example.com/page/foo

于 2013-01-20T11:57:12.847 回答
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;
}
}    
?>

重要 的是,您可以编辑此代码以提高安全性,例如在函数中使用之前清理数据;-) 如果在物理上或从 php 或数据库的数组中找不到请求的页面,您可以发送header('Location : ',true, 404);并提供您的 404 页面!

于 2013-01-20T12:12:52.243 回答