繁体   English   中英

重定向循环问题与mod_rewrite php脚本

[英]Redirect loop issue with mod_rewrite php script

我有一个具有以下规则的.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

我还将希望将其他一些网址更改,例如将... / movie-page.php更改为... / movie /等,...

我知道为什么会得到重定向循环,但是我不知道如何解决它。 如何将所有文件(有效文件和目录(例如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 : 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 : http://192.167.1.189/site_name/movie-page.php?id=2270 /site_name/movie-page.php?id=2270 ,那么$_SERVER['REQUEST_URI']/site_name/movie-page.php?id=2270 因此,也许您在if语句中想要这样的东西:

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

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM