问题使用mod_rewrite重写动态URL

时间:2011-03-23 20:51:27

标签: regex .htaccess mod-rewrite

我正在尝试使用以下代码重写动态网址:

RewriteRule (.*)/$ index.php?location=$1  
RewriteRule (.*)/(.*)/$ index.php?location=$1&company=$2

从上面的代码中可以看出,我真的需要两次重写。首先,我需要页面只重写位置,如果那就是全部。例如,它会将site.ccom / index.php?location = sandiego转换为site.com/sandiego/
这是正常的。

但是,当我尝试添加第二个变量时,它会失败。它设法检测& company = 1变量,但由于某种原因,它将?location = sandiego变量返回为'index.php'。例如,如果我输入以下内容:site.com/san-diego/1/然后尝试获取$ location和$ company变量,它将只成功获得$ company变量,并且将设置$ location变量'index.php',而不是'san-diego'。

非常感谢任何帮助。

3 个答案:

答案 0 :(得分:1)

我想我找到了解决方案。我正在使用以下内容:

RewriteRule ^([a-z0-9-]+)/?$ index.php?location=$1 [NC]
RewriteRule ^([a-z0-9-]+)/([a-z0-9-]+)/?$ index.php?location=$1&company=$2 [NC]

这似乎工作得很好,并成功重定向site.com/sandiego/和site.com/sandiego/1 /

答案 1 :(得分:0)

试试那些:

RewriteRule ^([a-z0-9]+)/?$    index.php?location=$1 [NC]
RewriteRule ^([a-z0-9]+)/([a-z0-9]+)/?.*$    index.php?location=$1&company=$2 [NC]

请记住,在进行URL重写时尝试捕获任何字符序列(通过使用例如(.*)(.+))通常是一个坏主意,如此主题中所述:{{ 3}}

答案 2 :(得分:0)

Try  ([^\/]*)/([^\/]*)/$  instead of (.*)/(.*)/$