带有GET请求的mod_rewrite

wil*_*amg 0 apache .htaccess mod-rewrite

我有mod_rewrite在我的大部分网站上工作.现在我有一个通常会指向的搜索

search.php?keyword=KEYWORD
Run Code Online (Sandbox Code Playgroud)

而我正在尝试重写它

search/?keyword=KEYWORD
Run Code Online (Sandbox Code Playgroud)

只是为了让它更清洁一点.所以这是我的mod_rewrite.(还有其他规则我只是发布了一个不起作用的规则.)

RewriteRule ^search/?keyword=([^/\.]+)/?$ search.php?search=$1
Run Code Online (Sandbox Code Playgroud)

当我在地址栏中输入我希望它的搜索方式时,我得到一个页面告诉我它是一个"断开链接"(我猜这是Chrome相当于404错误).那么我做错了什么?我认为问题是'='或'?' 登录规则(第一部分),因为当我将?keyword = part取出时,它可以正常工作.那有意义吗?


编辑:这是我的完整.htaccess代码:

RewriteEngine on
RewriteRule ^$ index.php
RewriteRule ^thoughts$ archives.php 
RewriteRule ^thoughts/$ archives.php
RewriteRule ^about$ about.php 
RewriteRule ^about/$ about.php 
RewriteRule ^search/\?keyword=([^/]+)$ search.php?search=$1 
RewriteRule ^tags/([^/]+)$ tags.php?tag=$1
RewriteRule ^thoughts/([^/]+)$ post.php?title=$1 [L]
Run Code Online (Sandbox Code Playgroud)

仍有错误页面...

Vic*_*ciu 5

如果你只是想改造:

search.php?keyword=KEYWORD
Run Code Online (Sandbox Code Playgroud)

成:

search/?keyword=KEYWORD
Run Code Online (Sandbox Code Playgroud)

你需要做的就是:

RewriteRule ^search/$ search.php [QSA]
Run Code Online (Sandbox Code Playgroud)

QSA标志表示"查询字符串追加",并通过GET传递给search.php:

search/?keyword=KEYWORDD
search/?name=value&name2=value2    
Run Code Online (Sandbox Code Playgroud)

您可能还想查看Apache MultiViews,它将每个/ foo请求发送到它在/目录中找到的任何foo.*文件,尽管它们被认为是坏的.