【发布时间】:2024-01-21 05:12:01
【问题描述】:
我正在使用这个 .htaccess 代码
RewriteEngine on
RewriteCond %{REQUEST_FILENAME} !-d
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-l
RewriteRule ^(.+)$ index.php?url=$1 [QSA,L]
这是我的 PHP
$url = isset($_GET['url']) ? $_GET['url'] : null;
$url = rtrim($url, '/');
$url = explode('/', $url);
if(empty($url[0])){
等等
现在我需要在 htaccess 中添加新的 GET 变量
我试过这个:
RewriteRule ^(.+)$ index.php?url=$1&lang=$2 [QSA,L]
但什么也没发生,因为我不明白如何检查 $_GET['lang'] 变量
当它可能存在或不存在时。 $_GET['url'] 变量也可以是字符串,例如
categories,companynane,employee
或者它可能只是categories 或categories,companyname 或者可能是NULL。
我不明白如何从链接中检查这个 lang 变量,如下所示: http://mydomain.com/categories/companynane/employee/en
这是我更新的课程。
<?php
class Bootstrap {
public function __construct(){
$url = isset($_GET['url']) ? $_GET['url'] : null;
$url = rtrim($url, '/');
$url = explode('/', $url);
if(empty($url[0])){
require Controllers.'main.php';
$controller = new main();
$controller->Index();
return false;
}
$file = Controllers.$url[0].'.php';
if(file_exists($file)){
require $file;
}else{
$this->error();
}
$controller = new $url[0];
$controller->loadmodel($url[0]);
if(isset($url[3])){
$_SESSION['lang'] = $url[3];
if(method_exists($controller, $url[1])){
$controller->{$url[1]}($url[2]);
}else{
$this->error();
}
}else{
if(isset($url[2])){
$testinglang = $this->_new->checklang($url[2]);
if($testinglang == true){
$_SESSION['lang'] = $url[2];
if(method_exists($controller, $url[1])){
$controller->{$url[1]}();
}else{
$this->error();
}
}else{
if(method_exists($controller, $url[1])){
$controller->{$url[1]}($url[2]);
}else{
$this->error();
}
}
}else{
if(isset($url[1])){
$testinglang = $this->_new->checklang($url[1]);
if($testinglang == true){
$_SESSION['lang'] = $url[1];
$controller->Index();
}else{
if(method_exists($controller, $url[1])){
$controller->{$url[1]}();
}else{
$this->error();
}
}
}else{
$controller->Index();
}
}
}
}
function error(){
require Controllers.'error.php';
$controller = new error();
$controller->Index();
return false;
}
}
我认为除了 $url[0] 之外的一切都很好。 如果 $url[0] 存在并且是语言怎么办? 或者可能是控制器 请告诉我如何检查。
【问题讨论】:
-
如果上面的代码有效,那么试试 RewriteRule ^(.+)/(.+)/$ index.php?url=$1&lang=$2 [QSA,L]
-
可能会起作用,但我不明白如何从 PHP 中检查此变量
-
您可以使用 $_GET 或 $_REQUEST 获取查询字符串
-
和你检查
url的方法一样使用isset($_GET['lang'])