PHP- 传递不带 .php 扩展名的 GET 变量?

PHP- to pass GET variable without .php extension?

我将所有内部 link 作为 MVC 方案,没有 .php 扩展。例子: http://examplesiste.com/login 将使用此算法检测 "login":

$page = substr($_SERVER['REQUEST_URI'], 1);

和加载页脚,页眉和检测到 "login.php" 之间。虽然最后的 link 看起来像这样:http://examplesidte.com/login(没有 .php)

我应该如何传递 GET 变量? 使用 php 扩展很明显 - http://examplesidte.com/login.php?id=abc666 但是,当然 http://examplesiste.com/login?id=abc666 不会起作用 有什么建议吗?

有很多技巧可以做到
但这里有一个您可以在项目中使用的快速简单的方法:

你所做的一切——将参数嵌入 URL 本身,例如:/login/id/36/

// first, exploding the URI, getting its parts
$uri = explode('/', $_SERVER['REQUEST_URI']);

// now we have [ '',  'login', 'id', 36' ]
$page = $uri[1]; // 'login' here

// now, finding the parameters
for($i=2; $i < count($uri)-2; $i+=2) $_GET[$uri[$i]] = $uri[$i+1]

print_r( $_GET );
// This will get you: [ 'id' => 36 ]

中提琴!像往常一样使用生成的 $_GET!
您可以嵌入任意数量的参数:/login/id/36/act/delete/

我认为您可以使用 .htaccess 文件在您的项目中隐藏 .php 扩展名。如果您的项目根目录中有一个名为“.htaccess”的文件,只需将这些行添加到其中:

RewriteEngine On

#Unless directory, remove trailing slash
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule ^([^/]+)/$ http://example.com/folder/ [R=301,L]

#Redirect external .php requests to extensionless url
RewriteCond %{THE_REQUEST} ^(.+)\.php([#?][^\ ]*)?\ HTTP/
RewriteRule ^(.+)\.php$ http://example.com/folder/ [R=301,L]

#Resolve .php file for extensionless php urls
RewriteRule ^([^/.]+)$ .php [L]

如果您之前没有 httaccess 文件,请使用此名称 (".htaccess") 创建一个文件并将其放在项目根文件夹中。