我正在构建一个包含大量参数的网站。目前我正在我的.htaccess文件中使用此代码:
Options +FollowSymLinks
RewriteEngine on
RewriteBase /epo
RewriteRule (.*)/(.*)/(.*)/(.*)/(.*)/$ index.php?section=$1&content=$2&site=$3¶m=$4¶m2=$5 [QSA]
RewriteRule (.*)/(.*)/(.*)/(.*)/$ index.php?section=$1&content=$2&site=$3&subsite=$4 [QSA]
RewriteRule (.*)/(.*)/(.*)/$ index.php?section=$1&content=$2&site=$3 [QSA]
RewriteRule (.*)/(.*)/$ index.php?section=$1&content=$2 [QSA]
RewriteRule (.*)/$ index.php?section=$1 [QSA]
RewriteCond %{REQUEST_URI} ^/[^\.]+[^/]$
RewriteRule ^(.*)$ http://%{HTTP_HOST}%{REQUEST_URI}/ [R=301,L]
我是mod_rewrite的新手,这就是为什么这段代码很乱。有没有更好的方法来处理所有这些参数?最后两行只是在那里添加一个“/”,以防没有。如果有人可以解释他们的代码也会很棒,所以我能理解我做错了什么:)
答案 0 :(得分:1)
我个人将所有请求重定向到一个文件,然后从那里处理它。
RewriteRule ^(.*)$ index.php?path=$1 [QSA]
然后在index.php中使用类似
的内容$params = explode('/', $_GET['path'];
$section = $params[0];
$content = $params[1];
$site = $params[2];
$subsite = $params[3];
//etc.
请记住,您确实需要对所有参数进行额外验证
答案 1 :(得分:1)
它类似于Hugo的例子但没有GET
param:
<IfModule mod_rewrite.c>
SetEnv HTTP_MOD_REWRITE On
RewriteEngine On
RewriteCond %{REQUEST_FILENAME} -s [OR]
RewriteCond %{REQUEST_FILENAME} -l [OR]
RewriteCond %{REQUEST_FILENAME} -d
RewriteRule ^.*$ - [NC,L]
RewriteRule ^.*$ index.php [NC,L]
</IfModule>
在PHP
中您可以执行以下操作:
$pathInfo = pathinfo($_SERVER['SCRIPT_NAME']);
$baseUrl = $pathInfo['dirname'];
$baseFile = $pathInfo['basename'];
$url = rtrim(str_replace([$baseUrl, '/'.$baseFile], '', $_SERVER['REQUEST_URI']), '/');
$method = strtolower($_SERVER['REQUEST_METHOD']);
$isModRewrite = array_key_exists('HTTP_MOD_REWRITE', $_SERVER);
您的网址现在看起来像:
http://www.yourserver.com/param1/param2
OR(如果未启用mod重写)
http://www.yourserver.com/index.php/param1/param2
$url
变量在两种方式中都与/param1/param2
您可以对此字符串执行explode
或使用此字符串提供PHP路由库以提取参数。
PHP路由示例库: