[英]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?
听起来这就是您要执行的操作:
?route=
查询字符串将友好重写为一个 index.php
脚本接收请求并进行处理,然后将其提供给浏览器 但您也想这样做:
?route=
查询字符串请求一个难看的URL 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.