MOD_REWRITE重写GET请求

我需要一个.htaccessexpression式来使用第二个getvariables或通过名称获取getvariables。 目前我的mod_rewrite改变URL去除index.php文件名,并改变pageName GETvariables,使它看起来像一个文件名。

我现在需要第二个GETvariables,但目前的方式,它甚至不承认第一次重写后获得variables,所以我想mod_rewrite处理第二个variables将是'blogpage = 1'(1将是你正在使用的博客页面),以便它看起来像这样:

*********.co.uk/PageName/2 

而不是这个

 *********.co.uk/PageName?blogpage=2 

由于目前没有这个工作,PHP脚本只是认为var不存在,并返回一个NULL值。

这是我目前的mod_rewrite条件:

 RewriteCond %{REQUEST_fileNAME} !-d RewriteCond %{REQUEST_fileNAME} !-f RewriteRule ^([^/\.]+)/?$ index.php?pageName=$1 

如果重写规则指定一个新的,Apache将replace整个查询string。 要添加,请使用QSA标志 ,如mod_rewrite文档中所述 :

修改查询string

默认情况下,查询string通过不变。 但是,您可以在包含查询string部分的replacestring中创buildURL。 只需在replacestring中使用问号表示应将以下文本重新注入查询string。 如果要删除现有的查询string,只需使用问号即可结束replacestring。 要合并新旧查询string,请使用[QSA]标志。

所以,如果你改变你的代码

 RewriteCond %{REQUEST_fileNAME} !-d RewriteCond %{REQUEST_fileNAME} !-f RewriteRule ^([^/\.]+)/?$ index.php?pageName=$1 [QSA] 

它也应该转发旧的查询string。


要进行第二次重写,只需添加另一个捕获组的规则。

 RewriteCond %{REQUEST_fileNAME} !-d RewriteCond %{REQUEST_fileNAME} !-f RewriteRule ^([^/\.]+)/([0-9]+)$ index.php?pageName=$1&blogpage=$2 [QSA,L] RewriteCond %{REQUEST_fileNAME} !-d RewriteCond %{REQUEST_fileNAME} !-f RewriteRule ^([^/\.]+)/?$ index.php?pageName=$1 [QSA]