php - htaccess GET 查询冲突

标签 php apache .htaccess mod-rewrite

我在服务器上设置了一个通配符子域,以将子域作为变量获取。这非常适合根目录。现在,我有一个子目录,我需要它也可以工作。但是当我将查询字符串附加到该子域时,问题就出现了。我的 .htaccess 在子目录 example.com/student 中:

<IfModule mod_rewrite.c>
Options -Indexes
Options +FollowSymlinks
RewriteEngine On

RewriteCond %{HTTP_HOST} !^([w]{3,3}[.]{1,1}){0,1}example.com$
RewriteCond %{HTTP_HOST} ^([0-9a-zA-Z-]*)[.]example.com$
RewriteRule ^MyCourse.php$ MyCourse.php?pageDetailId=%1 [L]

RewriteCond %{HTTP_HOST} !^([w]{3,3}[.]{1,1}){0,1}example.com$
RewriteCond %{HTTP_HOST} ^([0-9a-zA-Z-]*)[.]example.com$
RewriteRule ^MyExam.php?courseId=(0-9+)$ MyExam.php?pageDetailId=%1&courseId=$1 [L]
</IfModule>

MyCourse.php 工作正常,当然我没有向其附加任何查询字符串,但 MyExam.php 需要一个强制性的 GET 查询字符串作为 courseId。因此,无论我做什么,我要么获得子域 (pageDetailId) 要么获得 courseId,但永远不会同时获得两者。此外,如果有一种通用方法可以获取子目录所有文件中的子域变量,我将不胜感激。

最佳答案

在这部分规则中,只需添加QSA 标志,如果存在,它将发送查询字符串。您不必将其添加到规则中。

RewriteCond %{HTTP_HOST} !^([w]{3,3}[.]{1,1}){0,1}example.com$
RewriteCond %{HTTP_HOST} ^([0-9a-zA-Z-]*)[.]example.com$
RewriteRule ^MyExam.php$ MyExam.php?pageDetailId=%1 [QSA,L]

http://httpd.apache.org/docs/2.4/rewrite/flags.html#flag_qsa

关于php - htaccess GET 查询冲突,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31017213/

相关文章:

php - 将 $_POST 变量格式化为准备好的语句

linux - Apache2 无法启动

node.js - .htaccess 路由到 Node App

php - 具有子文件夹访问权限的 htaccess 子域

php - Laravel Eloquent 关系 AVG 有

javascript - 如何从父类别中排除特定子类别帖子?

apache - 捕获所有 .htaccess - 仅当之前未找到任何内容时

Apache 重定向到一个干净的 URL

php - 在 PHP 和 MySQL 中显示溢出的每月目标

apache - 如何在服务器 Windows 中的 plesk17 上安装 Apache