使用mod_rewrite php脚本重定向循环问题



我有一个.htaccess文件,其中包含以下规则:

RewriteEngine On
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule ^(.*)$ index.php?route=$1 [L,QSA]

在index.php中,我有:

$route = (isset($_GET['route'])?explode('/',$_GET['route']):null);
if(!empty($route)){
$route[0]; //movie
//$route[1]; //movie-name
header("Location: " . "http://192.167.1.189/site_name/movie/" . $route[1]);
// $route[1] = 2271 (movie id)
exit;
}

目标是从这个网址:

http://192.167.1.189/site_name/movie-page.php?id=2270

到这个网址:

http://192.167.1.189/site_name/movie/2270

我还想要一些其他的url更改,比如/movie-page.php到/电影等等…

我理解为什么我会得到重定向循环,但我不知道如何修复它。我如何将所有(除了有效的文件和目录,如css文件和图像)重定向到一个中心php文件,然后重定向到用户友好的url?

我理解为什么我会得到重定向循环,但我不知道如何修复它。我如何将所有(除了有效的文件和目录,如css文件和图像)重定向到一个中心php文件,然后重定向到用户友好的url?

所以听起来这就是你想要做的:

  1. 浏览器请求一个友好的URL
  2. .htaccess中的重写规则将友好重写为具有?route=查询字符串的规则
  3. index.php脚本接受请求并对其进行处理,并为浏览器提供所需的内容

但你也想做:

  1. 浏览器使用?route=查询字符串请求一个丑陋的URL
  2. 重写规则不执行任何操作,因为URI不匹配
  3. index.php脚本接受请求,发现它是一个丑陋的URL,并将浏览器重定向到友好的URL

为了做到这一点,您需要在脚本中检查原始请求的URL是什么样子的。您可以通过查看$_SERVER['REQUEST_URL']$_SERVER['REQUEST_URI']变量来完成此操作。它们应该告诉你浏览器实际请求的URI。

例如,如果有人在浏览器的URL地址栏中输入URL:http://192.167.1.189/site_name/movie/2270,那么重写规则会将其路由到index.php,然后在php文件中检查$_SERVER['REQUEST_URI'],它会显示:/site_name/movie/2270

但是,如果有人在他们的URL地址栏中输入:http://192.167.1.189/site_name/movie-page.php?id=2270,那么$_SERVER['REQUEST_URI']将是/site_name/movie-page.php?id=2270。因此,如果语句:

if(!empty($route) && 
strpos($_SERVER['REQUEST_URI'], "site_name/movie/") != 1
){

因此,您需要确保$route变量中有内容,并且$_SERVER['REQUEST_URI']变量不以/site_name/movie/开头。

相关内容

  • 没有找到相关文章

最新更新