.htaccess RewriteRule不起作用!

时间:2011-06-15 18:25:49

标签: php .htaccess mod-rewrite menu

我在我的菜单系统中使用php switch [_get]来创建url.com/?p=page,我希望将其更改为url.com/page.html。但我不能让它发挥作用,也许你们中的一些人知道正确的设置。

我目前正在使用它作为.htaccess:

RewriteEngine On
RewriteBase /
Options +FollowSymLinks
RewriteCond %{HTTP_HOST} !^www\.
RewriteRule ^(.*)$ http://www.%{HTTP_HOST}/$1 [R=301,L]
RewriteRule ^start(.*)\.html$ ?p=start$

谢谢!

更新

我尝试使用$1,但当我希望?p=start

时,网址仍为:/start.html

4 个答案:

答案 0 :(得分:2)

您似乎错过了上一条规则中的$1

RewriteRule ^start(.*)\.html$ ?p=start$1
                                     ^^^^

编辑在获得新信息后,请尝试:

RewriteCond %{QUERY_STRING} p=([a-z0-9]+) [NC]
RewriteRule . /%1.html [L]

这会捕获查询字符串中的p=参数并将其用于重写为page.html

答案 1 :(得分:1)

尝试

RewriteRule ^start(.*)\.html$ ?p=start$1 [L]

见最后的一(1)。

答案 2 :(得分:1)

htaccess反过来工作。

它会使/start.html代理变为?p=start,但您仍然可以将链接自定为/start.html

因此,请将所有<a href="?p=start">更改为<a href="/start.html">

答案 3 :(得分:1)

你需要

RewriteCond %{QUERY_STRING} ^p=(.+)$ [NC]
RewriteRule ^$ /%1.html? [R=301,L]

R = 301是更改浏览器中的网址,但是 您仍需要更新网站上的所有链接:

<a href="?p=start"><a href="/start.html">

编辑:尝试更新的(它有一个?后面的HTML)