【问题标题】:htaccess rewrite and redirect URLhtaccess 重写和重定向 URL
【发布时间】:2014-06-02 21:07:10
【问题描述】:

我正在寻找可以执行此操作的 htaccess 规则:

原始网址: ?til=main 替换为: /main

如果是这样的话:

原始网址: /index.php?til=main?til=main 重定向到: /main

到现在我只有这个代码:

RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule ^(.*)$ index.php?til=$1 [L,QSA]

它加载/main,但在它后面加载/index.php?til=main

【问题讨论】:

    标签: php .htaccess mod-rewrite redirect


    【解决方案1】:

    这应该可行:

    RewriteEngine On
    RewriteCond %{THE_REQUEST} ^(GET|POST)\ /\?til=(.*)\ HTTP [OR]
    RewriteCond %{THE_REQUEST} ^(GET|POST)\ /index\.php\?til=(.*)\ HTTP
    RewriteRule ^ /%2? [R=301,L]
    
    RewriteCond %{REQUEST_FILENAME} !-f
    RewriteCond %{REQUEST_FILENAME} !-d
    RewriteRule ^(.*)$ /index.php?til=$1 [L]
    

    它应该将index.php?til=main?til=main 重定向到/main

    【讨论】:

    • 如何将 til=main 替换为 til=%1 之类的东西??
    • 是的,它有效! ...快速问题如果我这样使用它有什么问题:RewriteCond %{THE_REQUEST} ^[A-Z]{3,9}\ /(.*)?til=([^&\ ]+)\ HTTP RewriteRule ^ /folder/%2? [R=301,L] 它似乎与 index.php?til=xxxx 和 ?til=xxxx 都可以正常工作
    • @Ered (.*) 它匹配在第一个捕获组上出现零次或多次的任何字符(换行符除外)(您可以参考$1)。而后者 ([^&\ ]+) 匹配除 &、\ 和空格之外的任何字符,在用 $2 引用的第二个捕获组上具有一个或多个时间。
    【解决方案2】:

    试试:

    RewriteEngine On
    
    RewriteCond %{THE_REQUEST} \ /+(?:index\.php|)\?til=([^&\ ]+)
    RewriteRule ^ /%1? [L,R]
    
    RewriteCond %{REQUEST_FILENAME} !-f
    RewriteCond %{REQUEST_FILENAME} !-d
    RewriteRule ^(.+)$ /index.php?til=$1 [L,QSA]
    

    【讨论】:

    • 如果我转到 index.php?til=main 或 ?til=main,它不会重定向
    • @JonLin 感谢截图:D
    猜你喜欢
    • 2015-07-28
    • 2016-09-28
    • 2013-01-27
    • 1970-01-01
    • 2017-06-16
    • 2013-12-21
    • 2015-03-04
    • 2014-11-26
    • 1970-01-01
    相关资源
    最近更新 更多