2014-04-08 71 views
0

我想更改我的网站的网址结构。我现在的URL结构是这样的:重写URL结构

www.domain.com/events/events.php?location=san%20francisco 

我想要的URL结构变更为:

www.domain.com/events/san-francisco 

我XMPL站点地图有一个像第一个例子中列出的URL。我希望搜索引擎像第二个例子那样为URL编制索引。我需要做什么才能做到这一点?位置参数中的{city}是动态的,取决于用户的IP地址。我是否需要更改我的XML站点地图以列出新的URL结构?我需要在我的.htaccess文件中输入什么内容。我是否需要将我的网站上的实际URL链接更改为新结构,或者我可以只使用.htaccess?

+0

请问你的PHP接受'www.domain.com /events/events.php?location = san-francisco'而不是'%20',或者你是否可以添加该功能TY?如果你可以添加它,那么如果你不能这么做,那么它会很容易做到你想做的事情,然后它会使用大量的服务器资源来完成从'%20'到短划线的转换,并且如果你托管的话可能不值得一个共享服务器。 – Prix

+0

@prix是的,它确实接受旧金山 –

回答

1

这应该工作:

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=302R=301当你知道它重定向正确

编辑:

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] 
+0

感谢您的swer。但是对于我的网页夜总会/ nightclubs.php和photos/photos.php呢?是否有我可以用于所有页面的一般重写,还是必须为每个页面创建一个规则? –

+0

也是参数'?location ='呢? – Howli

+0

是的位置参数是与他们。这是另一种变化。你能否给我这个例子的一般规则。夜总会/ nightclubs.php?location = San%20francisco&lid = 1234&sliding = 5678。而且我该如何将San%20francisco更改为San-francisco? –

0

您必须使用类似于以下文件的.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将导致相同的页面。

但是,如果您不更改您的站点地图或网站上的链接,搜索引擎将不知道这一点。 你有那么2个解决方案:

  • 改变所有的链接在您的网站,并与新的结构URL
  • 使用重定向规则“老”的页面重定向到“新”的那些站点地图

从我所了解的SEO来看,第一种选择是最好的。或者更好的是,这两种解决方案的组合:改变你的所有链接,并使用重定向301规则,因此已经被搜索引擎索引的页面不会失去其排名并避免重复的内容。

RewriteRule ^([^/]*)/(.*).php?location=(.*)$ http://www.yourdomain.com/$1/$3 [R=301] 
+0

感谢您的答案。但是对于我的网页夜总会/ nightclubs.php和photos/photos.php呢?是否有我可以用于所有页面的一般重写,还是必须为每个页面创建一个规则? –

+0

当然你可以:)我已更新我的帖子 –

+0

再次感谢您的答案。这是另一种变化。你能否给我这个例子的一般规则。夜总会/ nightclubs.php?location = San%20francisco&lid = 1234&sliding = 5678。而且我该如何将San%20francisco更改为San-francisco?对不起所有其他问题。提前致谢。 –