使用htaccess和mod_rewrite忽略/接受正斜杠

时间:2012-07-20 12:13:11

标签: php .htaccess mod-rewrite redirect

我需要一点帮助。

我正在制作一个收集查询字符串的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重定向。
  4. 这部分工作正常。但是,由于我控制之外的一些变量,我需要解释原始URL(使用htaccess / mod_rewrite),如下所示:

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

    仍然与以下内容相同:

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

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

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

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

    第一部分需要帮助......

    一些旧的url slugs中有正斜杠,如下:

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

    如果没有htaccess,上面的内容仍然有效,但是使用漂亮的(ier)url会失败:

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

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

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

    编辑:此.htaccess进入/ redirect目录

1 个答案:

答案 0 :(得分:0)

如果你这样做

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

这将接受正斜杠和下划线。要添加任何允许的字符,只需将它们添加到[]方括号内。某些字符可能需要转义,因此Google只能转义。