mod重写搜索框的清理网址

时间:2012-02-07 20:33:30

标签: search mod-rewrite httpd.conf clean-urls

我启用了mod重写以删除所有页面扩展....

这是在httpd.conf中完成的,因为我在windows上使用apache

我的设置是

<IfModule mod_rewrite.c>
   Options +FollowSymLinks
   Options +Indexes
   RewriteEngine On
   RewriteCond %{SCRIPT_FILENAME} !-d
   RewriteRule ^([^\.]+)$ $1.html [NC,L]
</IfModule>

这会使domain.com/bookings.html

显示为domain.com/bookings

我在html文件中启用了php,所以它解析了php的所有页面

但我现在在我的网站上放了一个搜索框,如果我搜索“音乐”,它将使用网址:

domain.com/search?q=music

我希望我的网址看起来像:

domain.com/search/music

但是,我希望能够输入

domain.com/search/abba

它会加载页面“search.html”让我们称之为“搜索”,它会添加参数?q = abba,但是仍然看起来像URL栏中的上述示例

我确信这可以通过mod重写来实现,但我不确定如何表达表达式。

提前感谢我收到的任何帮助:)

2 个答案:

答案 0 :(得分:0)

使用html中的网址类型:domain.com/search/music

将其添加到DocumentRoot中的.htaccess文件中。

Options +FollowSymLinks +Indexes -MultiViews
RewriteEngine on
RewriteBase /

RewriteCond %{REQUEST_URI} (search)/([\w\d]+) [NC]
RewriteRule ^ %1.html?q=%2 [L,QSA]

RewriteCond %{SCRIPT_FILENAME} !-d
RewriteCond %{SCRIPT_FILENAME} !-f
RewriteRule ^([^\.]+)$ $1.html [NC,L]

或将其添加到您的.conf文件

<IfModule mod_rewrite.c>
   Options +FollowSymLinks
   Options +Indexes
   RewriteEngine On

    RewriteCond %{REQUEST_URI} (search)/([\w\d]+) [NC]
    RewriteRule ^ %1.html?q=%2 [L,QSA]

    RewriteCond %{SCRIPT_FILENAME} !-d
    RewriteCond %{SCRIPT_FILENAME} !-f
    RewriteRule ^([^\.]+)$ $1.html [NC,L]
</IfModule>

答案 1 :(得分:0)

您可以添加一个简单的RewriteRule:

RewriteRule ^/search/([a-zA-Z0-9]+)$ /search?q=$1 [QSA,NC,L]
总而言之:

<IfModule mod_rewrite.c>
   Options +FollowSymLinks
   Options +Indexes
   RewriteEngine On
   RewriteCond %{SCRIPT_FILENAME} !-d
   RewriteRule ^([^\.]+)$ $1.html [NC,L]
   RewriteRule ^/search/([a-zA-Z0-9]+)$ /search?q=$1 [QSA,NC,L]
</IfModule>

哦顺便说一下:

如果这还不够:

两个提示:

如果您在托管环境中(=如果它是您自己的服务器可以修改虚拟主机,不仅仅是.htaccess文件),尝试使用RewriteLog指令:它可以帮助您找出这些问题:

# Trace:
# (!) file gets big quickly, remove in prod environments:
RewriteLog "/web/logs/mywebsite.rewrite.log"
RewriteLogLevel 9
RewriteEngine On

我最喜欢检查regexp的工具:

http://www.quanetic.com/Regex(别忘了选择ereg(POSIX)而不是preg(PCRE)!)