0

我正在尝试设置一个.htaccess文件,它将每个请求 URL 传递GET到一个名为.htaccess 的文件中index.php。唯一的例外是,当请求 URL 指向目录res时。

例子:

/wiki/cool-stuff          => index.php?uri=/wiki/cool-stuff
/wiki/cool-stuff?news=on  => index.php?uri=/wiki/cool-stuff&news=on
/res/cool-photo.jpg       => res/cool-photo.jpg

两个问题:

  1. /wiki/cool-stuff在第二个示例中传递给的 GET 变量没有传递给index.php
  2. 访问/res(不是/res/!!)突然/res/?uri=res 在我的浏览器index.php中显示我uri=res/。相反,访问/res/会向我显示index.php并且uri=res/浏览器中的 URL 保持不变(这没关系)。

.htaccess:_

RewriteEngine on
RewriteBase   /subthing/

RewriteCond   %{REQUEST_URI}    !/res/(.+)$
RewriteCond   %{REQUEST_URI}    !index.php
RewriteRule   (.*)              index.php?uri=$1 

我怎样才能实现所需的行为?

4

1 回答 1

1
  1. 尝试使用Query-String-Append标志,QSA

  2. 使尾部斜杠可选 - 在正则表达式中,这是通过添加?.

.htaccess

RewriteEngine on
RewriteBase   /subthing/

RewriteCond   %{REQUEST_URI}    !/res(/.*)?$
RewriteCond   %{REQUEST_URI}    !index.php
RewriteRule   (.*)              index.php?uri=$1 [QSA]

请注意,我已经调整了/res文件夹上的正则表达式以导致/resabc被重定向(如果斜杠是唯一的可选部分,那么任何以开头的内容res都会匹配。

Apache Mod_Rewrite 文档

于 2012-07-24T13:22:09.303 回答