簡體   English   中英

Apache mod_rewrite [R,C]不起作用

[英]Apache mod_rewrite [R,C] not working

我有以下設置

RewriteCond %{REQUEST_URI}  ^/search.php$
RewriteCond %{QUERY_STRING} ^what=(.*)&where=(.*)$
RewriteRule ^ /%1/%2? [R=302]

通過此設置,一切正常

example.com/search.php?what=foo&where=bar

被重寫為

example.com/foo/bar

但是我還需要再次點擊search.php,所以我添加了

    RewriteCond %{REQUEST_URI}  ^/search.php$
RewriteCond %{QUERY_STRING} ^what=(.*)&where=(.*)$
RewriteRule ^ /%1/%2? [R=302,C]
RewriteRule ^ /search.php?what=$1&where=$2 [L]

現在,它“跳過”了重定向並對其進行了重寫

從example.com/search.php?what=foo&where=bar到example.com/search.php?what=foo&where=bar

重定向不與C標志一起使用嗎?

你不可以做這個:

RewriteCond %{REQUEST_URI}  ^/search.php$
RewriteCond %{QUERY_STRING} ^what=(.*)&where=(.*)$
RewriteRule ^ /%1/%2? [R=302,C]
RewriteRule ^ /search.php?what=$1&where=$2 [L]

對於http://www.example.com/search.php?what=foo&where=bar ,您無法同時擊中/ foo / bar和/search.php?what=foo&where=bar,僅以唯一的方式重寫結果網址。

在上述規則中, http: //www.example.com/search.php?what=foo&where=bar,它將匹配所有4行,最后一行給出/search.php?what=&where=,因為$ 1和$ 2為空。

因此解決方案是刪除最后一行,如下所示:

RewriteCond %{REQUEST_URI}  ^/search.php$
RewriteCond %{QUERY_STRING} ^what=(.*)&where=(.*)$
RewriteRule ^ /%1/%2? [R=302]

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM