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

Apache 重写与htaccess友好的URL。我如何在我的网站上使用它?,apache,.htaccess,mod-rewrite,url-rewriting,Apache,.htaccess,Mod Rewrite,Url Rewriting,我正在使用重写规则重写htaccess上的URL,但当我想让我的站点使用它时,我就卡住了。 我希望我的链接看起来像: Options +FollowSymLinks RewriteEngine On RewriteBase / #this is for avoid extra / RewriteCond %{REQUEST_URI} ^(.*?)(/{2,})(.*)$ RewriteRule . %1/%3 [R=301,L] Re

我正在使用重写规则重写htaccess上的URL,但当我想让我的站点使用它时,我就卡住了。 我希望我的链接看起来像:

    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
mysite.com/section/?idN=alfanum
RewriteCond %{QUERY_STRING} ^id=(.*)$
RewriteRule  /mysite.com/section/$1? [L]
RewriteRule ^section/(.*)$ mysite.com/section/?id=$1
mysite.com/section/this-is-the-title-of-this-section

我使用“重写规则”得到以下结果:

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

那一刻很酷。但我检查了一些网站的网址,我意识到他们从一开始就有友好的网址 因此,我将上的url更改为:

    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
mysite.com/section/?idN=alfanum
RewriteCond %{QUERY_STRING} ^id=(.*)$
RewriteRule  /mysite.com/section/$1? [L]
RewriteRule ^section/(.*)$ mysite.com/section/?id=$1
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
mysite.com/section/?idN=alfanum
RewriteCond %{QUERY_STRING} ^id=(.*)$
RewriteRule  /mysite.com/section/$1? [L]
RewriteRule ^section/(.*)$ mysite.com/section/?id=$1
显然,这是行不通的。我错过了一步吗?

改变

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

因此,它匹配“section/”之后的任何内容。*,而不仅仅是数字\d+


此外,您应该在所有当前没有的重写规则中添加[L]标志,以提高效率。

我的php html如下所示:

<a href="section/?idN=<?= $rowNot[0]['id_new'];?>"></a>
我的规则如下:

    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
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这样的URL

有可能通过htaccess获得新的标题吗?或者我需要改变从数据库获取新数据的方式


谢谢

好的,我改为。*但我的url远不像友好的url,在htaccess中,我可以编写一个规则,获取节的标题并将其打印在url上以使其看起来友好吗?不,你不能在.htaccess中这样做。如果您真的想在Apache中实现这一点,那么必须在主服务器配置中实现这一点,这不是一项简单的任务。否则,请在应用程序中处理它。感谢您的回复,如果我将URL更改为我希望在html代码中显示的方式:mysite.com/setion/id-title-这种方式不起作用,我可以将id与htaccess一起使用吗?我发现这项服务对这项任务非常有用。是的,我前面提供的重写规则就是为了完成这项任务而编写的。我不确定问题出在哪里。。。