通过 .htaccess 传递可选的查询变量

jam*_*and 3 mod-rewrite apache-2.2

哦,.htaccess 让我头疼。

所以,我有一个网页,它有一个漂亮的 URL foo.com/radio/jobs虽然实际上住在 foo.com/content/directory_jobs.php/?section=radio

我使用 .htaccess 行...

RewriteRule ^(radio|tv|magazines|newspapers)/jobs$ /content/directory_jobs.php?section=$1
Run Code Online (Sandbox Code Playgroud)

同一页面有一个可选的 ?pages= 查询字符串 - 因此您可以访问foo.com/radio/jobs?page=2并查看第二页。

然而,上面的 .htaccess 行没有添加这个 pages 变量:结果是底层的 PHP 脚本没有看到“pages”变量。

我可以调整上面的 .htaccess 行以确保我确实传递了“pages”变量(如果存在)?或者我必须为这样的每个页面设置两条 .htaccess 行吗?

Smu*_*dge 5

只需添加 QSA(查询字符串附加)标志

RewriteRule ^(radio|tv|magazines|newspapers)/jobs$ /content/directory_jobs.php?section=$1 [QSA]
Run Code Online (Sandbox Code Playgroud)

例子;
使用 QSA 标志 /radio/jobs -> /content/directory_jobs.php?section=jobs
/radio/jobs?foo=bar -> /content/directory_jobs.php?section=jobs&foo=bar
/radio/jobs?foo=bar&boo= bosh -> /content/directory_jobs.php?section=jobs&foo=bar&boo=bosh
mod_rewrite 会判断是否需要添加 ? 或 $ so 用于重写规则

重写规则 ^([az]+)$ /$1.php [QSA]

/something?foo=bar -> /something.php?foo=bar