.htaccess 重写URL结构

.htaccess 重写URL结构,.htaccess,mod-rewrite,url-rewriting,rewrite,.htaccess,Mod Rewrite,Url Rewriting,Rewrite,我想更改我网站的URL结构。我当前的URL结构如下所示: www.domain.com/events/events.php?location=san%20francisco 我想将URL结构更改为: www.domain.com/events/san-francisco 我的XMPL站点地图中列出了与第一个示例类似的URL。我希望搜索引擎像第二个例子那样索引URL。我需要做些什么来实现这一目标?location参数中的{city}是动态的,具体取决于用户的IP地址。我是否需要更改XML站点地

我想更改我网站的URL结构。我当前的URL结构如下所示:

www.domain.com/events/events.php?location=san%20francisco
我想将URL结构更改为:

www.domain.com/events/san-francisco

我的XMPL站点地图中列出了与第一个示例类似的URL。我希望搜索引擎像第二个例子那样索引URL。我需要做些什么来实现这一目标?location参数中的{city}是动态的,具体取决于用户的IP地址。我是否需要更改XML站点地图以列出新的URL结构?我需要在我的
.htaccess
文件中放入什么。我是否需要将我网站上的实际URL链接更改为新结构,或者我可以只使用
.htaccess?
您必须使用与下面类似的.htaccess文件。它将匹配奇特的URL并将请求转发到正确的php文件

RewriteEngine On
RewriteRule ^([^/]*)/(.*)$ /$1/$1.php?location=$2
这样,www.domain.com/events/events.php?location=san%20francisco和www.domain.com/events/san-francisco都将指向同一页面

但是如果你不改变你的网站地图或网站上的链接,搜索引擎就不会知道这一点。 您有两种解决方案:

  • 使用新结构URL更改站点和站点地图中的所有链接
  • 使用重定向规则将“旧”页面重定向到“新”页面
从我对SEO的了解来看,第一种选择是最好的。或者更好的是,将这两种解决方案结合起来:更改所有链接,并使用重定向301规则,这样已经被搜索引擎索引的页面就不会失去排名,并避免重复内容

RewriteRule ^([^/]*)/(.*).php?location=(.*)$ http://www.yourdomain.com/$1/$3 [R=301]
这应该起作用:

RewriteEngine On
RewriteCond %{THE_REQUEST} ^(GET|POST)\ /events\.php\?location=(.*)%20(.*)\ HTTP
RewriteRule ^ /events/%2-%3\? [R=302,L]

RewriteRule ^events/(.*)$ /events.php?location=$1 [L]
当您知道正确重定向时,将
R=302
更改为
R=301

编辑:


您的PHP是否接受
www.domain.com/events/events.PHP?location=san francisco
而不是
%20
,或者您是否能够添加该功能?如果您可以添加,那么做您想做的事情将很容易。如果您不能添加,那么它将使用大量服务器资源来完成从
%20
到dash的转换,如果您托管在共享服务器上,则可能不值得。@prix yes它接受san FranciscoThanks作为答案。但是我的网页nightclubs/nightclubs.php和photos/photos.php呢?是否有一个我可以用于所有页面的一般重写规则,或者我必须为每个页面创建一个规则?再次感谢您的回答。这是另一个变体。你能告诉我这个例子的一般规则吗。夜总会/Nightclubs.php?location=San%20francisco&lid=1234&slide=5678。我怎样才能把旧金山变成旧金山呢?抱歉,还有其他问题。提前感谢。您希望夜总会/Nightclubs.php的重写URL是什么?location=San%20francisco&lid=1234&slide=5678?要改变旧金山,这应该直接在你的网站上用PHP或任何你正在使用的语言来完成。如果仍要进行重定向,可以执行以下操作:重写规则^([^/]*)/(.*)%20(.*)$[R=301]但您将看到一个重定向链:www.domain.com/events/events.php?location=san%20francisco-->www.domain.com/events/san%20franciscoth-->www.domain.com/events/san-franciscoth这是我想要的重写url:Nightclubs/san francisco/1234/5678RewriteEngine On#不带ID的简单url的规则1 RewriteRule^([^/]*)/(.*))$/$1/$1.php?location=$2#带lid和slide的URL规则2^([^/]*)/([^/]*)/([0-9]+)/([0-9]+)$/$1/$1.php?location=$2&lid=$3&slide=$4感谢您的回答。但是我的网页nightclubs/nightclubs.php和photos/photos.php呢?是否有一个可用于所有页面的通用重写规则,或者我必须为每个页面创建一个规则?参数
?位置=
也与它们一起使用?是位置参数与它们一起使用。这是另一个变体。你能告诉我这个例子的一般规则吗。夜总会/Nightclubs.php?location=San%20francisco&lid=1234&slide=5678。我怎样才能把旧金山变成旧金山呢?
RewriteEngine On
RewriteCond %{THE_REQUEST} ^(GET|POST)\ /(.*)/(.*)\.php\?location=(.*)%20(.*)&lid=(.*)&slid=(.*)\ HTTP
RewriteRule ^ /%3/%4-%5/%6/%7\? [R=302,L]
RewriteRule ^(.*)/(.*)/(.*)/(.*)$ /$1/$1.php?location=$2&lid=$3&slid=$4 [L]

RewriteCond %{THE_REQUEST} ^(GET|POST)\ /(.*)/(.*)\.php\?location=(.*)%20(.*)\ HTTP
RewriteRule ^ /%3/%4-%5\? [R=302,L]
RewriteRule ^([A-Za-z0-9]+)/([A-Za-z0-9]+)$ /$1/$1.php?location=$2 [L]