Apache 重写与htaccess友好的URL。我如何在我的网站上使用它?
我正在使用重写规则重写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
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一起使用吗?我发现这项服务对这项任务非常有用。是的,我前面提供的重写规则就是为了完成这项任务而编写的。我不确定问题出在哪里。。。