0

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

这是在 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”,我们称之为“search”,它会添加参数 ?q=abba ,但在 URL 栏中仍然看起来像上面的示例

我确信这可以通过 mod rewrite 来实现,但我不知道如何表达这个表达式。

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

4

2 回答 2

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

我最喜欢的检查正则表达式的工具:

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

于 2012-02-07T21:02:28.807 回答
0

在您的 html 中使用 URL 类型:domain.com/search/music

将此添加到.htaccessDocumentRoot 中的文件中。

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>
于 2012-02-07T20:42:29.417 回答