PHP 使用 /param1/param2 一次重写多个参数
PHP Rewrite multiple parameters at once with /param1/param2
我想知道如何将多个参数重写为 /param1/param2
假设我包含了一个名为 account.php 的文件
http://myurl.com/index.php?p=account。
它工作得很好,被重写为
但是假设我想在 account.php 中有多个参数,比如
http://myurl.com/index.php?p=account&settings
应该重写为:
http://myurl.com/account/settings 我该怎么做?
.htacces 文件:
<IfModule mod_rewrite.c>
RewriteEngine On
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteCond %{REQUEST_URI} !^/(favicon\.ico|apple-touch-icon.*\.png)$ [NC]
RewriteRule (.+) index.php?p= [QSA,L]
</IfModule>
PHP 包含文件的代码:
$pages = array('products','about','impressum','home','support','solutions','mc','team','account');
$p = 'home';
if(isset($_GET['p'])) {
$p = $_GET['p'];
}
if(in_array($p, $pages)){
include 'includes/'.$p.'.php';
}
else {
include 'includes/home.php';
}
我在我的网站上使用此代码可以满足您的需求
RewriteEngine on
RewriteBase /
RewriteRule ^post/([^/]+)/([^/]+)$ single.php?post_type=&post_id= [QSA]
RewriteRule ^([a-zA-Z]+)/([a-zA-Z]+)/?$ index.php\?p=&action=
RewriteRule ^([a-zA-Z]+)/?$ index.php\?p=
对于每个 ([a-zA-Z]+)
它会在 "results"..$1、$2、$3 等中添加另一个数字。因此您可以根据需要添加任意数量的重写...例如,这个是我的 mod 重写之一...
#WMS LIVE EDITOR
RewriteRule ^WMS/templateeditor/([a-zA-Z0-9]+)/([a-zA-Z0-9]+)/([a-zA-Z0-9]+)/([a-zA-Z0-9]+)/?$ WMS/templateeditor.php\?p1=&p2=&p3=&p4=
RewriteRule ^WMS/templateeditor/([a-zA-Z0-9]+)/([a-zA-Z0-9]+)/([a-zA-Z0-9]+)/?$ WMS/templateeditor.php\?p1=&p2=&p3=
RewriteRule ^WMS/templateeditor/([a-zA-Z0-9]+)/([a-zA-Z0-9]+)/?$ WMS/templateeditor.php\?p1=&p2=
RewriteRule ^WMS/templateeditor/([a-zA-Z0-9]+)/?$ WMS/templateeditor.php\?p1=
RewriteRule ^WMS/templateeditor/?$ WMS/templateeditor.php
在php页面上,只需添加$_GET['action'];
然后将 php 设置为如果为页面设置了操作,则转到该操作(在本例中为设置)。
我只是以 "action" 为例...它可以是任何你想要的。
编辑
RewriteEngine On
RewriteRule ^([a-zA-Z]+)/([a-zA-Z]+)/?$ index.php\?p=&
RewriteRule ^([a-zA-Z]+)/?$ index.php\?p=
我的php代码测试结果
$p = 'home';
if(isset($_GET['p'])) {
$p = $_GET['p'];
echo 'p:'. $p;
}
echo ' ';
if(isset($_GET['settings'])) {
echo 'yes';
}
我去了 domain.com/profile/settings
,它回应了以下内容:p:profile yes
修复包括
if(file_exists('rootDir.php')) { include_once ('rootDir.php'); }
if(file_exists('../rootDir.php')) { include_once ('../rootDir.php'); }
if(file_exists('../../rootDir.php')) { include_once ('../../rootDir.php'); }
if(file_exists('../../../rootDir.php')) { include_once ('../../../rootDir.php'); }
if(file_exists('../../../../rootDir.php')) { include_once ('../../../../rootDir.php'); }
if(file_exists('../../../../../rootDir.php')) { include_once ('../../../../../rootDir.php'); }
if(file_exists('../../../../../../rootDir.php')) { include_once ('../../../../../../rootDir.php'); }
这将有助于忽略 url
中的 "fake folders"
// ---------------------------------------- http() ---- determine if http/https
if (!function_exists('http')) {
function http() {
$pageURL = 'http';
if ($_SERVER["HTTPS"] == 'on') {$pageURL .= 's';}
$pageURL .= '://';
return $pageURL;
}
}
这是一个 php 函数,可以识别您的网站是使用 http:// 还是 https:// 作为绝对路径
这是获取网站url绝对路径的函数
// ---------------------------------------- parse URL ---- split URL into parts
$websiteurl = http() . $_SERVER[HTTP_HOST] . $_SERVER[REQUEST_URI];
$website = parse_url($websiteurl);
$websitedomain = $website['host'];
if (strpos($websiteurl, '~') !== FALSE) {
$subweb = explode('/', $websitedomain . $_SERVER[REQUEST_URI]);
$websitedomain = $subweb[0] .'/'. $subweb[1];
}
如何将代码添加到您的站点的示例
<link rel="stylesheet" type="text/css" href="<?php echo http() . $websitedomain .'/WMS/css/style.css'; ?>"/>
我想知道如何将多个参数重写为 /param1/param2
假设我包含了一个名为 account.php 的文件
http://myurl.com/index.php?p=account。
它工作得很好,被重写为
但是假设我想在 account.php 中有多个参数,比如
http://myurl.com/index.php?p=account&settings
应该重写为:
http://myurl.com/account/settings 我该怎么做?
.htacces 文件:
<IfModule mod_rewrite.c>
RewriteEngine On
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteCond %{REQUEST_URI} !^/(favicon\.ico|apple-touch-icon.*\.png)$ [NC]
RewriteRule (.+) index.php?p= [QSA,L]
</IfModule>
PHP 包含文件的代码:
$pages = array('products','about','impressum','home','support','solutions','mc','team','account');
$p = 'home';
if(isset($_GET['p'])) {
$p = $_GET['p'];
}
if(in_array($p, $pages)){
include 'includes/'.$p.'.php';
}
else {
include 'includes/home.php';
}
我在我的网站上使用此代码可以满足您的需求
RewriteEngine on
RewriteBase /
RewriteRule ^post/([^/]+)/([^/]+)$ single.php?post_type=&post_id= [QSA]
RewriteRule ^([a-zA-Z]+)/([a-zA-Z]+)/?$ index.php\?p=&action=
RewriteRule ^([a-zA-Z]+)/?$ index.php\?p=
对于每个 ([a-zA-Z]+)
它会在 "results"..$1、$2、$3 等中添加另一个数字。因此您可以根据需要添加任意数量的重写...例如,这个是我的 mod 重写之一...
#WMS LIVE EDITOR
RewriteRule ^WMS/templateeditor/([a-zA-Z0-9]+)/([a-zA-Z0-9]+)/([a-zA-Z0-9]+)/([a-zA-Z0-9]+)/?$ WMS/templateeditor.php\?p1=&p2=&p3=&p4=
RewriteRule ^WMS/templateeditor/([a-zA-Z0-9]+)/([a-zA-Z0-9]+)/([a-zA-Z0-9]+)/?$ WMS/templateeditor.php\?p1=&p2=&p3=
RewriteRule ^WMS/templateeditor/([a-zA-Z0-9]+)/([a-zA-Z0-9]+)/?$ WMS/templateeditor.php\?p1=&p2=
RewriteRule ^WMS/templateeditor/([a-zA-Z0-9]+)/?$ WMS/templateeditor.php\?p1=
RewriteRule ^WMS/templateeditor/?$ WMS/templateeditor.php
在php页面上,只需添加$_GET['action'];
然后将 php 设置为如果为页面设置了操作,则转到该操作(在本例中为设置)。
我只是以 "action" 为例...它可以是任何你想要的。
编辑
RewriteEngine On
RewriteRule ^([a-zA-Z]+)/([a-zA-Z]+)/?$ index.php\?p=&
RewriteRule ^([a-zA-Z]+)/?$ index.php\?p=
我的php代码测试结果
$p = 'home';
if(isset($_GET['p'])) {
$p = $_GET['p'];
echo 'p:'. $p;
}
echo ' ';
if(isset($_GET['settings'])) {
echo 'yes';
}
我去了 domain.com/profile/settings
,它回应了以下内容:p:profile yes
修复包括
if(file_exists('rootDir.php')) { include_once ('rootDir.php'); }
if(file_exists('../rootDir.php')) { include_once ('../rootDir.php'); }
if(file_exists('../../rootDir.php')) { include_once ('../../rootDir.php'); }
if(file_exists('../../../rootDir.php')) { include_once ('../../../rootDir.php'); }
if(file_exists('../../../../rootDir.php')) { include_once ('../../../../rootDir.php'); }
if(file_exists('../../../../../rootDir.php')) { include_once ('../../../../../rootDir.php'); }
if(file_exists('../../../../../../rootDir.php')) { include_once ('../../../../../../rootDir.php'); }
这将有助于忽略 url
中的 "fake folders"// ---------------------------------------- http() ---- determine if http/https
if (!function_exists('http')) {
function http() {
$pageURL = 'http';
if ($_SERVER["HTTPS"] == 'on') {$pageURL .= 's';}
$pageURL .= '://';
return $pageURL;
}
}
这是一个 php 函数,可以识别您的网站是使用 http:// 还是 https:// 作为绝对路径
这是获取网站url绝对路径的函数
// ---------------------------------------- parse URL ---- split URL into parts
$websiteurl = http() . $_SERVER[HTTP_HOST] . $_SERVER[REQUEST_URI];
$website = parse_url($websiteurl);
$websitedomain = $website['host'];
if (strpos($websiteurl, '~') !== FALSE) {
$subweb = explode('/', $websitedomain . $_SERVER[REQUEST_URI]);
$websitedomain = $subweb[0] .'/'. $subweb[1];
}
如何将代码添加到您的站点的示例
<link rel="stylesheet" type="text/css" href="<?php echo http() . $websitedomain .'/WMS/css/style.css'; ?>"/>