繁体   English   中英

.htaccess RewriteRule不起作用!

[英].htaccess RewriteRule won't work!

我在菜单系统中使用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

看起来您在最后一条规则中缺少了$1

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

编辑新信息后,请尝试:

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

这将从查询字符串中捕获p=参数,并使用它重写为page.html

尝试

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

参见末尾的一(1)。

htaccess的工作方式相反。

它使诸如/start.html代理之类的东西成为?p=start但是,您仍然可以将链接本身定位为/start.html

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

你需要

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

R = 301用于更改浏览器中的URL,但是您仍然需要更新站点上的所有链接:

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

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM