我的.htaccess重定向失败


my .htaccess redirection fails

htaccess是启用的,我有规范化运行(no-www to 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

然而,我想我走的是相反的路。我找不到这样的例子。我有这个,但我不能让它工作。

试试这个:

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/

您希望www.domain.com/Page1在浏览器的地址栏中可见,但在内部该url实际上应该是/page.php?i=Page1。在这种情况下,问题是在您的regex尾随/:

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

您期望的/Page1 url没有尾斜杠,但是您的重写正则表达式需要一个斜杠,因此模式不匹配,并且不会发生重写。试着删除/,看看是否有帮助:

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

为了解析出查询字符串,您需要在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]