我正在创建一个PHP框架,我有些疑惑......
框架以这种方式获取URL:
http:/web.com/site/index
它需要第一个参数来加载controller(site)然后加载特定的动作(index).
如果您已经在基本URL中安装了框架,则可以正常工作,但如果您将其安装在如下的子文件夹中:
http://web.com/mysubfolder/controller/action
我的脚本将其解析为controller = mysubfolder和action = controller.
如果你有更多的子文件夹,结果将是最糟糕的.
这是我的路线代码:
Class Route
{
private $_htaccess = TRUE;
private $_suffix = ".jsp";
public function params()
{
$url='';
//nombre del directorio actual del script ejecutandose.
//basename(dirname($_SERVER['SCRIPT_FILENAME']));
if($this->_htaccess !== FALSE):
//no está funcionando bien si está en un subdirectorio web, por ej stynat.dyndns.org/subdir/
// muestra el "subdir" como primer parámetro
$url = $_SERVER['REQUEST_URI'];
if(isset($_SERVER['QUERY_STRING']) && !empty($_SERVER['QUERY_STRING'])):
$url = str_replace("?" . $_SERVER['QUERY_STRING'], '',$url);
endif;
else: …Run Code Online (Sandbox Code Playgroud) 我正在尝试创建一个非常简单的URL路由,我的思维过程是这样的:
静态URL当然很容易做到,但我试图找出做动态URL的最佳方法.我宁愿不必设置静态前缀,尽管知道它会使代码更容易编写.
这就是我目前拥有的:
$requestURL = $_SERVER['REQUEST_URI'];
if ($requestURL == '/') {
// do stuff for the homepage
}
elseif ($requestURL == '/register') {
// do stuff for registration
}
// should match just "/some-unique-url-here"
elseif (preg_match("/([\/A-Za-z0-9\-]+)/",$requestURL)) {
// query database for that url variable
}
// should match "/some-unique-url/and-another-unique-url"
elseif (preg_match("(^\/[A-Za-z0-9\-]+\/[A-Za-z0-9\-]+)/",$requestURL)) {
// query database for first and second variable
}
else {
// 404 stuff
}
Run Code Online (Sandbox Code Playgroud)
我的问题是,如果我有"/ register"URI,它将匹配第二个elseif语句以及正则表达式语句.但我想避免必须从regex语句中明确排除每个静态URL,例如:
// should match just "/some-unique-url-here"
elseif ((preg_match("/([\/A-Za-z0-9\-]+)/",$requestURL)) && …Run Code Online (Sandbox Code Playgroud)