我启用了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重写来实现,但我不确定如何表达表达式。
提前感谢我收到的任何帮助:)
答案 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)!)