如果你去像这样的网址:http://stackoverflow.com/questions/9155602/
地址栏将更新到http://stackoverflow.com/questions/9155602/redirect-existing-file-to-different-url-using-mod-rewrite
。这不是用JavaScript完成的,也不是用硬刷新完成的,我最好的猜测是它使用mod_rewrite完成;然而,它如何知道没有服务器端处理与PHP文章的标题?如何重写SEO友好的网址,如stackoverflow
我刚刚更新我的网站使用SEO友好的网址,它曾经是/shows.php?id=review-1
,现在它的/review/1/super-baseball-2020
。在最后的文本实际上并没有真正的问题,当涉及到我的改写是:
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule ^([a-z0-9]+)/([0-9]+)/([a-z0-9-]+)?/?$ /shows.php?id=$1-$2 [L,NC]
我现在要确保谷歌不会打我重复的内容,以及书签正确转发的路径如下:
RewriteCond %{THE_REQUEST} ^GET\s/shows\.php\?
RewriteCond %{QUERY_STRING} (?:^|&)id=review-1(?:&|$) [NC]
RewriteRule^/review/1/super-baseball-2020/? [R=301,L,NC]
RewriteCond %{THE_REQUEST} ^GET\s/shows\.php\?
RewriteCond %{QUERY_STRING} (?:^|&)id=review-2(?:&|$) [NC]
RewriteRule^/review/2/aero-fighters-2/? [R=301,L,NC]
RewriteCond %{THE_REQUEST} ^GET\s/shows\.php\?
RewriteCond %{QUERY_STRING} (?:^|&)id=review-3(?:&|$) [NC]
RewriteRule^/review/3/aero-fighters-3/? [R=301,L,NC]
.... and so on ....
该解决方案是非常短视的,是成千上万的行放入我的.htaccess。
我怀疑这个功能是使用'mod_rewrite'完成的。会发生什么情况是,对stackoverflow.com/*anything*的任何请求都由相同的服务器端代码处理,然后解析该URL并*路由*请求代码以使用问题ID为页面提供内容。问题标题被服务器忽略,请尝试访问http://stackoverflow.com/questions/9168364/bouncing-fluffy-muffins – millimoose 2012-02-06 22:46:03
通常mvc应用程序将路由所有输入的请求到相同的脚本(前端控制器),这将解析请求自己,并将操作委托给正确的控制器类。 – dqhendricks 2012-02-06 22:52:23