我的.htaccess重定向失败了

时间:2011-10-28 19:33:38

标签: php .htaccess

启用htaccess,我正在运行规范化(没有www到www。)

我正在尝试使用htaccess执行以下操作

www.domain.com/page.php?i=Page1
www.domain.com/page.php?i=Page2

www.domain.com/Page1
www.domain.com/Page2

我尝试使用此代码段,到目前为止没有运气:

rewriterule ^([a-zA-Z0-9_-]+)/$ page.php?i=$1

然而,我认为我会采取相反的方式。我找不到这个例子。 我有this但我不能让它发挥作用。

3 个答案:

答案 0 :(得分:2)

试试这个:

RewriteEngine On
RewriteCond %{REQUEST_URI}  ^/page\.php$
RewriteCond %{QUERY_STRING} ^i=([a-zA-Z0-9_-]+)$
RewriteRule ^(.*)$ http://www.domain.com/%1? [R=302,L]

取自:http://www.simonecarletti.com/blog/2009/01/apache-query-string-redirects/

答案 1 :(得分:0)

您希望www.domain.com/Page1在浏览器的地址栏中可见,但在内部该网址应该是/page.php?i=Page1。在这种情况下,问题是正则表达式中的尾随/

Rewriterule ^([a-zA-Z0-9_-]+)/$ page.php?i=$1
                             ^---here

您想要的/Page1网址没有斜杠,但您的重写正则表达式需要一个,因此模式不匹配,并且不会重写。尝试删除/并查看是否有帮助:

Rewriterule ^([a-zA-Z0-9_-]+)$ page.php?i=$1
                             ^---no /

答案 2 :(得分:0)

为了解析查询字符串,您需要在RewriteCond

中访问它
# We need this line because /page.php?i=page.php will cause an infinite loop
RewriteCond %{QUERY_STRING} !i=page.php
# Now we parse out the value of i from the query string
RewriteCond %{QUERY_STRING} i=([^&]+)
RewriteRule ^page.php /%1  [L]