2011-06-15 219 views
1

我在我的菜单系统中使用php开关[_get]创建url.com/?p=page,我希望将其更改为url.com/page.html。但我无法让它工作,也许你们中的一些人知道正确的设置。.htaccess重写规则不起作用!

我目前使用这个作为的.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

请在您的浏览器*中将URL添加到问题中。 – hakre 2011-06-15 18:41:07

+0

以及我只是输入url.com,但由于菜单只包含7个链接,我希望每个链接都是url.com/page而不是page.com/?p=page – MstrQKN 2011-06-15 18:50:32

+0

这与.htaccess文件无关。您需要更改菜单代码的输出。 – hakre 2011-06-15 19:05:59

回答

2

看起来像你缺少你的最后一条规则的$1

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

编辑新信息后,请尝试:

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

此捕获来自查询字符串的p=参数,并使用它来重写page.html

+0

嗯我试过$ 1,但仍然是这样的网址:?p =开始时,我想它是/start.html – MstrQKN 2011-06-15 18:35:55

+1

@Jaoza媒体所以你想让你的用户输入'/ start.html'并将内部重定向到'? p = start'?请给出一个例子,说明用户输入的内容与内部重定向的内容。 – 2011-06-15 18:43:24

+0

@Michael对不起,我的坏描述:) 基本上我想要htaccess重定向所有的URL从?p = page到page.html,但因为我已经有了静态id的,例如start/about/services/contact我想要ie ?p =服务为services.html。 – MstrQKN 2011-06-15 18:46:13

1

尝试

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

见(1)在最后的一个。

+0

不幸的是,它不起作用。[L]做什么? – MstrQKN 2011-06-15 18:36:36

+0

L = Last - Last Rule。 [请参阅文档](http://httpd.apache.org/docs/2.0/mod/mod_rewrite.html#rewriterule),此规则后不会执行其他规则。 – hakre 2011-06-15 18:44:35

1

htaccess以相反的方式工作。

它使得像/start.html代理?p=start然而,你仍然使链接本身目标/start.html

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

+0

现在他们被称为start.php等,但由于搜索引擎优化,我希望URL在HTML中。 – MstrQKN 2011-06-15 18:49:05

1

你需要

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

R = 301是改变浏览器的URL,但 你仍然需要更新网站上的所有链接:

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

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

+0

改变它们到什么?感谢您的帮助 – MstrQKN 2011-06-15 19:29:40

+0

我试过你的解决方案,但它给了我start.html?p = start而不是start.html – MstrQKN 2011-06-15 19:30:37

+0

@Jaoza Media检查更新后的 – venimus 2011-06-16 08:37:19