【问题标题】:Redirect dynamic URL with two parameters to a static URL, htaccess将带有两个参数的动态 URL 重定向到静态 URL,htaccess
【发布时间】:2016-02-12 20:50:49
【问题描述】:

我有两个参数(动态值)的动态 URL,我想重写并重定向到静态 URL:

http://www.example.com/pagename.php?id=[some_number]&title=[some-title-seperated-by-hyphens]

上面的 URL 应该被重写并重定向到下面的 URL 以便在浏览器地址中输入两个 URL 中的任何一个时 栏它应该显示下面的 URL。而且我还希望即使悬停在第一个 URL 超链接上,它也应该显示静态 URL 在浏览器的左下角:

http://www.example.com/[some_number]/[some-title-seperated-by-hyphens]

我已经尝试了下面的代码,但它不起作用。

RewriteEngine On

RewriteCond %{THE_REQUEST} \s/+/pagename\.php\?id=([^&]+)&title=([^\s&]+) [NC]
RewriteRule ^ /%1/%2? [R=301,L]

RewriteRule ^([^/]+)/(-[^/]+)/?$ /pagename.php?id=$1&title=$2 [L,QSA]

【问题讨论】:

    标签: .htaccess url redirect mod-rewrite url-rewriting


    【解决方案1】:

    试试这些规则:

    RewriteEngine On
    
    RewriteCond %{THE_REQUEST} /pagename\.php\?id=([^&\s]+)&title=([^\s&]+) [NC]
    RewriteRule ^ /%1/%2? [R=302,NE,L]
    
    RewriteRule ^(\S+)\s+(.*)$ $1-$2 [L]
    
    RewriteCond %{REQUEST_FILENAME} -f [OR]
    RewriteCond %{REQUEST_FILENAME} -d
    RewriteRule ^ - [L]
    
    RewriteCond %{ENV:REDIRECT_STATUS} 200
    RewriteRule ^(\S+)$ /$1 [NE,R=302,L]
    
    RewriteRule ^([^/]+)/([^/]+)/?$ pagename.php?id=$1&title=$2 [L,QSA]
    

    【讨论】:

    • 感谢 Anubhava,我需要将标题(第二个参数)的单词用连字符 (-) 分隔。
    • 和stackoverflow的这个页面的URL一样,第二个参数是页面的标题,但是URL之间用连字符(破折号)隔开。
    • 非常感谢 Anubhava,它成功了,但是如果 URL 太长,我们会收到内部服务器错误。
    • 如果要替换的空格太多,则使用:RewriteRule ^(\S+)\s+(.*)$ /$1-$2 [L,R=302,NE]
    猜你喜欢
    • 2014-02-17
    • 1970-01-01
    • 1970-01-01
    • 2013-05-15
    • 2014-07-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多