对于我的程序,我使用PHP进行动态URL重写:
<IfModule mod_rewrite.c>
RewriteEngine On
RewriteBase /
#Rewrite the URI if there is no file or folder
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
#rewrite all to index.php
RewriteRule ^(.*)$ index.php?/$1 [L]
</IfModule>
在PHP中,我在其不同部分分解了URL。例如,http://myhost/foo/bar
会返回foo bar
。我遇到的问题是程序是否位于服务器的根目录中,例如http://myhost/this/is/a/folder/hereistheprogram/foo/bar
,因为脚本返回this is a folder hereistheprogram foo bar
。现在有一个问题,我无法区分文件夹和URL参数。
答案 0 :(得分:2)
您需要知道脚本文件的路径是什么。您可以通过显式声明路径前缀或自动确定它来执行此操作,例如:
$basePath = dirname($_SERVER['SCRIPT_NAME']);
然后您可以使用该前缀并从请求URI路径中删除它:
if (substr($requestPath, 0, strlen($basePath)+1) === $basePath.'/') {
$path = substr($requestPath, strlen($basePath));
} else {
$path = $requestPath;
}
顺便说一下:如果你没有将请求URI路径明确地传递给 index.php 但是从$_SERVER['REQUEST_URI']
检索它会更好:
$_SERVER['REQUEST_URI_PATH'] = parse_url($_SERVER['REQUEST_URI'], PHP_URL_PATH);
$_SERVER['REQUEST_URI_QUERY'] = parse_url($_SERVER['REQUEST_URI'], PHP_URL_QUERY);
相应的mod_rewrite规则:
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule ^(.*)$ index.php [L]
答案 1 :(得分:1)
不太确定确切的问题,但是..
你可以在网址中使用常量'foo'标识符来识别字符串的中断位置吗?