0

我目前正在使用 apache 代码:

RewriteEngine On
RewriteBase /
RewriteRule ^index\.php$ - [L]
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
# Categories + Page:
RewriteRule ^([a-z\-]+)/([a-z\-]+)$ /index.php?category=$1&page=$2
RewriteRule ^([a-z\-]+)/([a-z\-]+)/$ /index.php?category=$1&page=$2
# Categories:
RewriteRule ^([a-z\-]+)$ /index.php?category=$1
RewriteRule ^([a-z\-]+)/$ /index.php?category=$1

这会将我的网址从:example.com?category=software&page=mobile 变成 example.com/software/mobile/

哪个工作正常,并且 php 文件能够 $_GET['category'] 正常;但是,由于某种原因,它无法识别 $_GET['page']; 它只会导致它每次都是空的。

在 Apache 代码方面我不是最好的,所以有人能告诉我哪里出错了吗?

我用于 php 来获取变量的代码很简单:

$category = $_GET['category'];
$page = $_GET['page'];

此外,如果有人可以帮助我优化它,使其适用于任意数量的参数,那就更好了。

谢谢!

4

1 回答 1

1
RewriteRule ^([a-z\-]+)/([a-z\-]+)$ /index.php?category=$1&page=$2 [PT,L,QSA]
RewriteRule ^([a-z\-]+)/([a-z\-]+)/$ /index.php?category=$1&page=$2 [PT,L,QSA]
# Categories:
RewriteRule ^([a-z\-]+)$ /index.php?category=$1 [PT,L,QSA]
RewriteRule ^([a-z\-]+)/$ /index.php?category=$1 [PT,L,QSA]

添加 QSA 可能会有所帮助

当替换 URI 包含查询字符串时,RewriteRule 的默认行为是丢弃现有的查询字符串,并将其替换为新生成的查询字符串。使用 [QSA] 标志会合并查询字符串。

考虑以下规则:

RewriteRule /pages/(.+) /page.php?page=$1 [QSA]

使用 [QSA] 标志,对 /pages/123?one=two 的请求将被映射到 /page.php?page=123&one=two。如果没有 [QSA] 标志,相同的请求将被映射到 /page.php?page=123 - 也就是说,现有的查询字符串将被丢弃。

于 2013-01-25T19:45:04.647 回答