apache htaccess - 重写没有等号的查询字符串

时间:2018-04-10 12:40:39

标签: apache .htaccess

这让我疯了。任何帮助表示赞赏!

我的网站有一堆格式的动态条目:

http://example.com/foo?item-1   
http://example.com/foo?item-2  

注意到?后面没有等号/参数,只是上面的一个字符串。

我想清理网址,以便我们进入:

http://example.com/foo/item-1   

所以基本上,我只想删除foo页面的那个讨厌的问号,并用斜杠替换它。我以前没见过有人解决这个案子。我试过以下但没有成功:

RewriteRule ^foo/([^/]*)\$ /foo?$1 [L] 

已经有两个其他规则正在使用(两者都有效)。这些从URL的末尾和开始的http中删除php,如下所示。

RewriteCond %{REQUEST_FILENAME} !-f  
RewriteRule ^([^\.]+)$ $1.php [NC,L]  
RewriteCond %{HTTP_HOST} ^www.example.com  
RewriteRule (.*) http://example.com/$1 [R=301,L]  

提前再次感谢。

1 个答案:

答案 0 :(得分:0)

你的正则表达式有问题。 \符号前面的$表示您确实希望在那里匹配一个美元符号。尝试不使用\

此外,您可能需要在PHP规则之前但在重定向之后。在内部重写之前,您需要外部重定向:

RewriteCond %{HTTP_HOST} ^www.example.com  
RewriteRule (.*) http://example.com/$1 [R=301,L]  
RewriteRule ^foo/([^/]*)$ /foo?$1 [L] 
RewriteCond %{REQUEST_FILENAME} !-f  
RewriteRule ^([^\.]+)$ $1.php [NC,L]