我有这个规则:
RewriteEngine On RewriteRule ^/page/([a-zA-Z0-9]+)\?(.*)$ /index.php?page=$1&$2
它应该采取这样的事情:
/page/contact?cake=lie
并转到页面:
/index.php?page=contact&cake=lie
我已经用RegExr和RegexPal等工具testing过了,它在那里工作。 但是当把它放入Apachesconfiguration,访问url给Apaches 404页面。
谁能帮忙?
如果您想逐字传递现有的查询string,mod_rewrite会为此提供QSA标志 。 使用它,您的规则集可以简化为以下内容:
RewriteEngine On RewriteRule ^/page/([a-zA-Z0-9]+)$ /index.php?page=$1 [QSA]
然后,mod_rewrite会自动附加任何现有的查询string到您通过replace添加的string。 其结果与Steven Monai的方法实际上是一样的 ,但是我觉得这个方法有点干净。
默认情况下,mod_write与REQUEST_URI匹配,REQUEST_URI只包含URI而不包含dynamic参数,所以它会在问号后丢弃所有的东西。
要匹配完整的URI,您需要使用THE_REQUEST(或者如果有另一种方法,请赐教!)。 请注意,它包含客户端发送的完整请求,例如“GET / foo?bar = baz HTTP / 1.1”。
尝试类似
RewriteCond %{THE_REQUEST} ^(.*)$ RewriteRule ^GET /page/([a-zA-Z0-9]+)\?(.*) HTTP.*$ /index.php?page=$1&$2
你有重写引擎打开?
RewriteEngine On
Janne对你的规则不起作用的评估是正确的。 但是我会采取一个较为复杂的方法来解决这个问题:
RewriteRule ^/page/([a-zA-Z0-9]+)$ /index.php?page=$1&%{QUERY_STRING}
当Apache已经在%{QUERY_STRING}给你提供查询string时,不需要分开原始请求。
这里logging了通过%{VARNAME}语法提供给您的服务器variables列表。