0

我有一个有点令人困惑的问题。我试图理解 mod_rewrite 但我很困惑。

我正在尝试做的是将所有 URL(例如 /settings/account 或 /user/user123)重定向到 index.php。PHP 脚本(我已经创建)使用 $_SERVER['REQUEST_URI'] 将 URL 分解为多个部分,然后使用包含。例如,它将包括 settings.php?page=account 或 user.php?uid=user123。

但如果 URL 是 /settings.php?page=account 或 /user.php?uid=user123 我不希望它通过索引重定向。换句话说,如果 URl 有文件扩展名,只需转到该文件,但如果它没有(如 /settings),则转到 index.php 以处理它应该去的地方。

如何才能做到这一点?在此先感谢您的任何建议!

4

2 回答 2

0

如果您不想使用常见的redirect-every-url-which-has-no-corresponding-file方法,您也可以尝试您的方法。要将不带点的任何内容重定向到通用脚本,请使用:

 RewriteRule  ^([^.]*)$  index.php?path=$1

您可能仍然希望排除一些 URL,例如images/css/等。然后在规则之前使用简单的 RewriteCond:

 RewriteCond  %{REQUEST_URI}  !images/
 RewriteCond  %{REQUEST_URI}  !css/
于 2012-10-18T01:41:01.343 回答
0

您需要的是带有和模式的RewriteCond指令。!-f!-d

RewriteCond检查用户的 HTTP 请求是否符合提供的条件。在您的情况下,您需要使用后缀检查%{REQUEST_FILENAME}文档根目录中是否已存在请求的文件(在变量中提供) 。!-f同样,如果您想在目录中建立索引,您可以添加相同的模式 with !-d,这将检查请求的目录是否在您的文档根目录中。

所以在实际之前的这两行RewriteRule就可以了:

RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
于 2012-10-18T01:42:31.363 回答