我已经使用.htaccess重写了我的网址,所有内容都可以正常进行重定向,但是找不到所选文章的ID。
我的网址已使用以下网址从http://www/website.co.uk/news.php?id=111111
更改为http://www.website.co.uk/news/111111
RewriteEngine On
RewriteCond %{QUERY_STRING} ^id=(.*)$
RewriteRule ^news.php$ /news/%1? [L,R]
但是,在news.php页面中,我使用以下方式捕获ID号:
if(isset($_GET["id"])){
$id = $_GET["id"];
}
else{
header("Location: redirect.php?type=error");
exit();
因此,当我现在运行该页面时,它会重定向到redirect.php页面,因为它不是获取ID。我该如何排序这个错误?
答案 0 :(得分:0)
您已编写外部重定向,将用户的浏览器指向http://www.website.co.uk/news/111111
。这正是您的服务器将看到的URL - 因此,URL中没有ID参数。您必须再向.htaccess
添加一行到内部,将该URL重写为旧(参数化)的一行:
RewriteRule ^news/([0-9]+) news.php?id=$1 [QSA]
用户仍会看到没有参数的重写URL,但您的PHP脚本将获得旧的(news.php?id=111111
)。
答案 1 :(得分:0)
尝试使用PHP的preg_split()方法将URI拆分为可用值。
<?php
define('APPLICATION_URL', 'http://website.co.uk/');
$url = str_replace(APPLICATION_URL, null, $_SERVER['REQUEST_URI']);
$urlData = preg_split('/[\/\?]/', $url);
echo $urlData[0] . '/' . $urlData[1];
?>
以上代码应输出:news/111111
答案 2 :(得分:0)
以下内容应该有效
RewriteEngine On
RewriteCond %{QUERY_STRING} ^id=(.*)$
RewriteRule ^news.php$ /news/%1? [L,R]
RewriteRule ^news/(.*) news.php?id=$1 [QSA]
第二个RewriteRule
应该默默地将网址重写回原始网址,以便用户仍然可以看到news/11111
,但您的网页应该会获取id
值。
编辑:试试这个
RewriteEngine On
#External redirect with THE_REQUEST trick; change R to R=301 when everything works correctly
RewriteCond %{THE_REQUEST} ^(GET|POST)\ /news\.php\?id=(.*)\ HTTP
RewriteRule ^ /news/%2\? [R,L]
#Internal rewrite
RewriteRule ^news/(.*) /news.php?id=$1 [L]