我的mod_rewrite工作在我的大部分网站上。现在我有一个通常会指向
的搜索search.php?keyword=KEYWORD
我正在尝试将其重写为
search/?keyword=KEYWORD
只是为了让它更清洁一点。所以这是我的mod_rewrite。 (还有其他规则我只是发布了一个不起作用的规则。)
RewriteRule ^search/?keyword=([^/\.]+)/?$ search.php?search=$1
当我在地址栏中输入我想要的搜索方式时,我得到一个页面告诉我它是一个“断开链接”(我猜这是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]
仍然收到错误页面...
答案 0 :(得分:5)
如果你只想改造:
search.php?keyword=KEYWORD
成:
search/?keyword=KEYWORD
您需要做的就是:
RewriteRule ^search/$ search.php [QSA]
QSA标志表示“查询字符串追加”,并通过GET传递给search.php:
search/?keyword=KEYWORDD
search/?name=value&name2=value2
您可能还想查看Apache MultiViews,它将每个/ foo请求发送到它在/目录中找到的任何foo。*文件,尽管它们是considered bad。
答案 1 :(得分:1)
RewriteRule ^search/\?keyword=([^/.]+)/?$ search.php?search=$1
问号字符在正则表达式中具有特殊含义。你需要逃脱它。
此外,在字符类内部时,点没有特殊含义;你不需要逃避它(你要求该关键字不包含正斜杠和点)。