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]