.htaccess重定向多个参数

时间:2018-03-14 02:33:40

标签: .htaccess mod-rewrite url-rewriting

我正在重建一个房地产网站,我们已经完全重组了数据库处理属性的方式,我现在正在尝试将所有旧的属性URL重定向到新的属性URL。我遇到的问题是旧网址为单个属性使用了多个参数(包括section和property属性),而新网址仅使用slug作为属性名称。

示例:

OLD: https://www.example.com/listings.php?sect=1&view=92
NEW: https://www.example.com/listings/tombstone-ranch

我当前的.htaccess看起来如下所示,最后两行是将slugs转换成干净网址的重写...这一切都很好。

RewriteEngine On
RewriteBase /

# remove .php; use THE_REQUEST to prevent infinite loops
RewriteCond %{THE_REQUEST} ^GET\ (.*)\.php\ HTTP
RewriteRule (.*)\.php$ $1 [R=301]

# remove index
RewriteRule (.*)/index$ $1/ [R=301]

# remove slash if not directory
RewriteCond %{REQUEST_FILENAME} !-d
RewriteCond %{REQUEST_URI} /$
RewriteRule (.*)/ $1 [R=301]

# add .php to access file, but don't redirect
RewriteCond %{REQUEST_FILENAME}.php -f
RewriteCond %{REQUEST_URI} !/$
RewriteRule (.*) $1\.php [L]

RewriteRule ^listings/([a-zA-Z0-9-/]+)$ /listings/index.php?s=$1 [L]
RewriteRule ^listings/([a-zA-Z0-9-/]+)/$ /listings/index.php?s=$1 [L]

我遇到的问题是以下两种情况似乎都不起作用:

Redirect 301 /listings.php?sect=1&view=92 /listings/tombstone-ranch

,这也不是:

RewriteRule ^listings.php?sect=3&view=33 /listings/tombstone-ranch

或我尝试过的任何其他变体。

有什么想法? .htaccess不是我强大的西装,不幸的是我需要让这些工作考虑到旧版本的网站,它的网址已经存在了将近8年,所以有大约75个属性的死链接的可能性。

1 个答案:

答案 0 :(得分:1)

你能试试这个规则吗?目前无法测试。

RewriteCond %{QUERY_STRING} sect=1&view=92
RewriteRule ^listings\.php$ /listings/thombstone-ranch/? [L,R=301]

您添加的规则也不起作用,因为您必须添加反斜杠

错:

RewriteRule ^listings.php?sect=3&view=33 /listings/tombstone-ranch

右:

RewriteRule ^listings\.php?sect=3&view=33 /listings/tombstone-ranch

不要忘记,因为您的主要网址是一个查询,您应该使用我给您的第一个选项。如果这不起作用留下评论,我很乐意帮助你