mod_rewrite在url中使用变量的数字位置

时间:2012-01-24 07:17:25

标签: apache .htaccess mod-rewrite

如果标题不是很清楚,我很抱歉,因为我是mod_rewrite的新手,而且我不确定如何正确地表达这个问题。

我想将 http://www.url.com/module/subdirectory/another_subdirectory/page 等花哨的网址重写为 http://www.url.com/ D_1 =模块&安培; D_2 =子目录&安培; D_3 = another_subdirectory&安培;页=页即可。子目录的数量不同,因此参数d_ *可以是动态的(尽管尝试将其保持在d_1和d_9之间)。花哨的url也可以拥有自己的查询字符串,并且需要在页面参数之后重写它。

我读了一下Apache的mod_rewrite和regex文档,并花了一些时间在Google和Stackoverflow上搜索这个问题的答案,但找不到任何针对这个特定问题的内容。非常感谢那些知识渊博的人对这个问题的任何帮助。

2 个答案:

答案 0 :(得分:0)

您可以在根目录的.htacess中尝试类似下面的内容,但您需要完成最多9个案例。

我还假设您的CMS应用程序是index.php。如果没有替换正确的.php文件

RewriteEngine on
RewriteBase /

#one subdir
RewriteRule ^module/([^/]+)/([^/]+)$ index.php?d_1=module&d_2=$1&page=$2 [QSA,L,NC]
#two subdir
RewriteRule ^module/([^/]+)/([^/]+)/([^/]+)$ index.php?d_1=module&d_2=$1&d_3=$2&page=$3 [QSA,L,NC]
#three subdir
RewriteRule ^module/([^/]+)/([^/]+)/([^/]+)/([^/]+)$ index.php?d_1=module&d_2=$1&d_3=$2&d_4=$3&page=$4 [QSA,L,NC]

答案 1 :(得分:0)

通过使subdir-parts可选,改变Ulrich的代码,不需要那么多重复。最后一部分始终映射到page

RewriteRule ^(module)/(?:([^/]+)/)?(?:([^/]+)/)?(?:([^/]+)/)?(?:([^/]+)/)?(?:([^/]+)/)?(?:([^/]+)/)?(?:([^/]+)/)?(?:([^/]+)/)?([^/]+)$ index.php?d_1=$1&d_2=$2&d_3=$3&d_4=$4&d_5=$5&d_6=$6&d_7=$7&d_8=$8&page=$9 [QSA,L,NC]

虽然我更喜欢使用一些PHP代码。

$dirs = expode('/', $_SERVER['REQUEST_URI']);
array_shift($dirs);//remove first empty string.
$page = array_pop($dirs);//get last part of the url.