0

我需要一点帮助。

我正在制作一个 php 页面,该页面收集查询字符串,针对数据库对其进行测试以查找匹配项,然后将用户重定向到网站的不同部分。

这是它目前的工作方式(没有 htaccess/mod_rewrite):

  1. 用户访问:domain.com/redirect/index.php?slug=Test_1
  2. php 页面清理并在数据库中查找“Test_1”并检索目标 URL 以将用户重定向到。(例如 domain.com/New_Test_1)
  3. 然后 php 页面 301 相应地重定向。

这部分工作正常。但是,由于我无法控制某些变量,我需要解释原始 URL(使用 htaccess/mod_rewrite),如下所示:

  • domain.com/redirect/index.php/Test_1

仍然与以下内容相同:

  • domain.com/redirect/index.php?slug=Test_1

(注意:是的,index.php 需要保留在 url 中。)

我在我的 htaccess 中使用了以下内容,但我知道它可能会更好:

RewriteEngine On
Options +FollowSymLinks

RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule ^(.*)/(.*)$ %{DOCUMENT_ROOT}/redirect/index.php?slug=$2 [PT,L,QSA]

我需要帮助...

一些旧的 url slug 中有正斜杠,如下所示:

  • domain.com/redirect/index.php?slug=How_to_Code/Program

如果没有 htaccess,上述方法仍然有效,但使用 pretty(ier) url 失败:

  • domain.com/redirect/index.php/How_to_Code/Program

使用我当前的 htaccess,它只捕获“How_to_Code”部分,但忽略它之后的所有内容。

所以我的问题是:如何重组我的 htaccess 以获取 domain.com/redirect/index.php/(.*)$ 之后的所有内容,包括正斜杠?

编辑:这个 .htaccess 进入 /redirect 目录

4

1 回答 1

0

如果你这样做

RewriteRule ^redirect/index.php/([a-zA-Z0-9/_]+)$ redirect/index.php?slug=$1

这将接受正斜杠和下划线。要添加更多允许的字符,只需将它们添加到 [] 方括号内。某些字符可能需要转义,所以只需谷歌即可。

于 2012-07-20T12:24:18.807 回答