如何在php中的htaccess文件中重写url?

时间:2015-09-08 06:09:21

标签: php apache .htaccess mod-rewrite

我是php的新手。 我的.htaccess文件位于

之下
DirectoryIndex index.php
<IfModule mod_rewrite.c>
RewriteEngine On
#RewriteBase /
RewriteCond %{REQUEST_URI} ^(.*)//(.*)$
RewriteRule . %1/%2 [R=301,L]
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule ^.*$ index.php?qa-rewrite=$0&%{QUERY_STRING} [L]
</IfModule>

有了这个,以下网址格式正常工作

  • /?qa=123/why-do-birds-sing
  • /?qa=123&qa_1=why-do-birds-sing
  • /index.php?qa=123&qa_1=why-do-birds-sing

但我想进入以下格式

site.com/123/why-do-birds-sing 

我尝试添加以下行

RewriteRule ^.*$ index.php/qa-rewrite=$0&%{QUERY_STRING} [L]

site.com/123/why-do-birds-sing无效。我应该做些什么来改变所需的网址格式?

P.S site.com/index.php/123/why-do-birds-sing正在运行,但我想重写没有index.php

1 个答案:

答案 0 :(得分:1)

重写规则的工作方式是它们接受参数中的任何内容,并将url重构为更易读且用户友好的URL。同时将参数(秘密地)传递到您的页面以供使用。

然后,您可以使用$_GET['my-parameter']

正常访问接收页面上的参数

以下是您需要的重写规则。

在这部分^([A-Za-z0-9_-]+)/([A-Za-z0-9_-]+)$中,它将斜杠之前的所有内容写为第一个参数,将斜杠之后的所有内容写为第二个参数。允许任何大写字母,小写字母,数字0-9,下划线和&amp;的混合。连字符。

RewriteRule    ^([A-Za-z0-9_-]+)/([A-Za-z0-9_-]+)$    index.php?qa=$1&qa_1=$2    [NC,L]

然后构建您的链接...... 123/why-do-birds-sing

您的网址将显示为http://example.com/123/why-do-birds-sing

快乐的编码!