用htaccess重写网址友好。我如何在我的网站上使用它?

时间:2014-06-16 19:35:10

标签: apache .htaccess mod-rewrite url-rewriting

我正在使用重写规则重写htaccess上的网址,但是当我希望我的网站使用它时,我会陷入困境。 我希望我的链接看起来像:

mysite.com/section/this-is-the-title-of-this-section

我使用重写规则来获得这个:

mysite.com/section/?id=longalfanum mysite.com/section/longalfanum

这很酷。但我检查了几个网站的URL,我发现他们从一开始就有友好的URL 所以我改变了网址上的网址:

mysite.com/section/longalfanum-the-title-of-the-section

现在我的链接不像以前那样工作。

我的htaccess看起来像:

    Options +FollowSymLinks
    RewriteEngine On
    RewriteBase /
    #this is for avoid extra /
    RewriteCond %{REQUEST_URI} ^(.*?)(/{2,})(.*)$
    RewriteRule . %1/%3 [R=301,L]



    RewriteCond %{QUERY_STRING} !^$
    RewriteRule .*/mysite.com/%{REQUEST_URI}? [R=301,L]
    RewriteCond %{SCRIPT_FILENAME} !-d
    RewriteCond %{SCRIPT_FILENAME} !-f

    #this is my rule
    RewriteCond %{QUERY_STRING} ^id=(\d+)$
    RewriteRule  /mysite.com/section/$1? [L]
    RewriteRule ^section/(\d+)$ mysite.com/section/?id=$1

显然,这不起作用。我错过了一步吗?

2 个答案:

答案 0 :(得分:0)

更改

RewriteRule ^section/(\d+)$ mysite.com/section/?id=$1

RewriteRule ^section/(.*)$ mysite.com/section/?id=$1

所以它匹配'section /'之后的任何内容(.*),而不仅仅是数字(\d+

此外,您应该向所有当前没有它的RewriteRules添加[L]标志,以提高效率。

答案 1 :(得分:0)

我用PHP的html看起来像这样:

<a href="section/?idN=<?= $rowNot[0]['id_new'];?>"></a>
Web浏览器中的

看起来像:

mysite.com/section/?idN=alfanum

我的规则如下:

RewriteCond %{QUERY_STRING} ^id=(.*)$
RewriteRule  /mysite.com/section/$1? [L]
RewriteRule ^section/(.*)$ mysite.com/section/?id=$1

有了这个我只得到像mysite / section / nosensealfanum

这样的网址

有可能通过htaccess获得新标题吗?或者我需要对从db中获取新内容的方式进行更改吗?

感谢