我有一个.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?
答案 0 :(得分:1)
我理解为什么会得到重定向循环,但我不知道如何修复它。如何将所有(除了有效的文件和目录,如css文件和图像)重定向到中央php文件,然后重定向到用户友好的URL?
所以听起来这就是你要做的事情:
?route=
查询字符串index.php
脚本接收请求并对其进行处理,并为浏览器提供所需内容但你也想这样做:
?route=
查询字符串index.php
脚本接收请求,发现它是一个丑陋的URL,并将浏览器重定向到友好的浏览器。为此,您需要在脚本中检查原始请求的URL的外观。您可以通过查看$_SERVER['REQUEST_URL']
或$_SERVER['REQUEST_URI']
变量来执行此操作。他们应该告诉你浏览器实际请求的URI。
例如,如果有人在其浏览器的URL地址栏中输入了URL:http://192.167.1.189/site_name/movie/2270
,则重写规则会将其路由到index.php
,然后在您的php文件中,您可以检查{ {1}}它会说:$_SERVER['REQUEST_URI']
。
但是,如果有人输入了他们的网址栏/site_name/movie/2270
,则http://192.167.1.189/site_name/movie-page.php?id=2270
将为$_SERVER['REQUEST_URI']
。所以也许你想要 if 声明中的类似内容:
/site_name/movie-page.php?id=2270
因此,您要确保if(!empty($route) &&
strpos($_SERVER['REQUEST_URI'], "site_name/movie/") != 1
){
var中存在某些内容,并且$route
var不以$_SERVER['REQUEST_URI']
开头。