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") 创建一个文件并将其放在项目根文件夹中。
我将所有内部 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") 创建一个文件并将其放在项目根文件夹中。