用.htaccess重写动态url结构

时间:2013-03-25 19:12:08

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

我试图将动态网址(下面)重写为略有不同的结构;要么不起作用,要么我不确定它是否正确:

  • 旧网址(网址#1):index.php?lang = AAA& zone = BBB& city = CCC& str = DDD& search = EEE
  • 新网址(网址#11):index.php?lang = AAA& country = BBB& place = CCC& street = DDD

*基本上改变了名称,“搜索”字符串不再重要

  • 我想要实现的是将所有访问者从(旧)动态URL#1重定向到(新)动态URL#11

在第二步中,在所有搜索引擎显示新网址后,我们完成了非sef网址更容易的所有测试,我们希望将网址#11重写为网址#2

  • 新网址(网址#11):index.php?lang = AAA& country = BBB& place = CCC& street = DDD
  • Sef URL(URL#2):/ AAA / BBB / CCC / DDD

我对apache编程不是很熟悉,即使我的解决方案有效,我们也不确定它是否是正确的,或者它是否会产生某些URL的错误。对于SEF网址,在创建执行第1步重定向的.htaccess文件和稍后要使用的单独.htaccess文件时,将非常感谢任何帮助。谢谢!

3 个答案:

答案 0 :(得分:1)

  

http://example.com/index.php?lang=AAA&zone=BBB&city=CCC&str=DDD&search=EEE

     

重定向到:

     

http://example.com/AAA/BBB/CCC/DDD

     

静默映射到:

     

http://example.com/index.php?lang=AAA&country=BBB&place=CCC&street=DDD

您可以在根目录中的一个.htacces文件中尝试:

Options +FollowSymlinks -MultiViews
RewriteEngine On
RewriteBase /

RewriteCond %{QUERY_STRING} lang=([^&]+)&zone=([^&]+)&city=([^&]+)&str=([^&]+)&search=  [NC]
RewriteRule .* /%1/%2/%3/%4?   [R=301,L,NC]

RewriteCond %{REQUEST_URI} ^/([^/]+)/([^/]+)/([^/]+)/([^/]+)/?  [NC]
RewriteCond %{REQUEST_URI} !index\.php                          [NC]
RewriteRule .* /index.php?lang=%1&country=%2&place=%3&street=%4 [L,NC]

如果查询包含此格式的参数:%nn,请尝试将 B 标志添加到这两个规则中。示例:[L,NC,B]。

答案 1 :(得分:0)

假设您的变量只包含小写字母和数字,请尝试:

RewriteRule ^/([a-z0-9]+)/([a-z0-9]+)/([a-z0-9]+)/([a-z0-9]+)$
    /index.php?lang=$1&country=$2&place=$3&street=$4
RewriteCond %{QUERY_STRING}
    ^lang=([a-z0-9]+)&zone=([a-z0-9]+)&city=([a-z0-9]+)&str=([a-z0-9]+)&search=[a-z0-9]+$
RewriteRule ^index.php$
    /index.php?lang=%1&country=%2&place=%3&street=%4 [R=permanent]

(请注意,必须有没有换行符,但我在这里插入了缩进,只是为了让这个网页上的块可读。)

答案 2 :(得分:0)

以下是faa

的代码(第一步)
Options +FollowSymlinks -MultiViews
RewriteEngine On
RewriteBase /

RewriteCond %{QUERY_STRING} lang=([^&]+)&zone=([^&]+)&city=([^&]+)&str=([^&]+)&search=  [NC]
RewriteRule .* /index.php?lang=%1&country=%2&place=%3&street=%4 [L,NC]