启用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但我不能让它发挥作用。
答案 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]