GVKun编程网logo

mysql查询从给定的表结构创建SEO友好的url(mysql查询的结果创建一个表)

8

对于想了解mysql查询从给定的表结构创建SEO友好的url的读者,本文将是一篇不可错过的文章,我们将详细介绍mysql查询的结果创建一个表,并且为您提供关于.htaccess和seo友好的url、3

对于想了解mysql查询从给定的表结构创建SEO友好的url的读者,本文将是一篇不可错过的文章,我们将详细介绍mysql查询的结果创建一个表,并且为您提供关于.htaccess和seo友好的url、301通过.htaccess将查询stringredirect到SEO友好的URL、Java从给定的URL获取域名、Laravel 8路由到控制器 SEO友好的URL结构的有价值信息。

本文目录一览:

mysql查询从给定的表结构创建SEO友好的url(mysql查询的结果创建一个表)

mysql查询从给定的表结构创建SEO友好的url(mysql查询的结果创建一个表)

我正在尝试编写一个mysql查询,它将使用产生以下输出的类别表为pages表中的所有页面生成URL。

预期的输出量:

预期的

这是我尝试生成最多4个段的URL的MySql查询:

SELECT pg.id AS page_id, p3.id, p1.category AS segment1, p2.category AS segment2, p3.category AS segment3, pg.page_name AS PAGE , concat( ''/'', p1.category, ''/'', p2.category, ''/'', p3.category, ''/'', pg.page_name, ''/'' ) AS urlFROM category AS p1, category AS p2, category AS p3, pages AS pgWHERE pg.category_id = p3.idAND p3.parent_id = p2.idAND p2.parent_id = p1.id

链接到 SQL Fiddle

答案1

小编典典

这是我自己的问题的答案:

我尝试使用“ MySql Modified preorder tree to create
url ”方法,该方法在查询优化和通过stackoverflow进行的其他研究方面更有用。

.htaccess和seo友好的url

.htaccess和seo友好的url

我们现在有一个电子商务网站,有一系列的品牌。 品牌页面包含以下url:

http://www.<DOMAIN>.com/catalog/brand/view?id=2

我们需要利用更友好(SEO友好)的url,例如:

http://www.<DOMAIN>.com/<BRAND>

但是这样会解决上面的#1。

这是在根.htaccess文件中完成吗? 如果是这样的话,那么正确的方法是什么呢?

406不可接受的错误GET参数问题?

如何更改厨师Nginx的默认HTTP端口80?

如何重新编写锚定cms的指令

APC文件caching不工作,但用户caching是好的

htaccess无声redirect到子目录:显示没有结尾“/”的子目录

请记住,URL#1是合法的地址,但我们希望使用URL#2格式进行链接。 这不是301types的redirect吗? 除非我误解了它,否则更“永久”,不是吗?

非常感谢。

使用Apache Mahout分类数据

Plesk / Nginx上传问题

如何将htaccess的子域redirect写入https

网页内容不会在每台电脑上进行压缩

在Apache中启用css和js文件的caching

你正在寻找的Apache功能称为mod_rewrite 。 你应该可以谷歌和找到好的资源在这里的帮助。

基本思想是指定正则表达式匹配,然后是替换模式。 您可以将其设置为301重定向,但默认情况下不重定向用户,只需访问重写的url。

这是一个例子:

RewriteEngine On RewriteRule (.*) index.PHP

RewriteRule说重写任何匹配的url(。*)到index.PHP。 这对于大多数文件并不是特别有用。 我相信你会有很多的例子,因为这是一个常见的问题。

除非你认为品牌名称可能会改变,否则你想重写2次,一次是重定向,一次是内部重写:

RewriteRule ^catalog/brand/view?id=2 /<BRAND> [R=301,L] RewriteRule ^<BRAND> /catalog/brand/view?id=2

这意味着浏览器/蜘蛛将永远看到漂亮的URL,而你的应用程序将看到真实的URL。

您可以通过在索引中添加.htaccess或在httpd.conf中进行配置来完成。

这里有一个可以帮助你的工具。 你需要的是一个变形器

我希望这可以帮助你..你将需要做一些修改…:P

define(''SEO_HOST'',"http://www.example.com"); define(''SEO_ITEM_PATTERN'',SEO_HOST . ''/%s-prod-%s''); define(''SEO_CATEGORY_PATTERN'',SEO_HOST . ''/%s-cat-%s''); define(''SEO_COMBO_PATTERN'',SEO_HOST . ''/%s-combo-%s''); class SEO { function seems_utf8($Str) { # by bmorel at ssi dot fr $length = strlen($Str); for ($i=0; $i < $length; $i++) { if (ord($Str[$i]) < 0x80) continue; # 0bbbbbbb elseif ((ord($Str[$i]) & 0xE0) == 0xC0) $n=1; # 110bbbbb elseif ((ord($Str[$i]) & 0xF0) == 0xE0) $n=2; # 1110bbbb elseif ((ord($Str[$i]) & 0xF8) == 0xF0) $n=3; # 11110bbb elseif ((ord($Str[$i]) & 0xFC) == 0xF8) $n=4; # 111110bb elseif ((ord($Str[$i]) & 0xFE) == 0xFC) $n=5; # 1111110b else return false; # Does not match any model for ($j=0; $j<$n; $j++) { # n bytes matching 10bbbbbb follow ? if ((++$i == $length) || ((ord($Str[$i]) & 0xC0) != 0x80)) return false; } } return true; } function get_beauty_url_string($string) { if ( !preg_match(''/[x80-xff]/'',$string) ) return self::replace_no_alpha_chars($string); if (self::seems_utf8($string)) { $chars = array( // Decompositions for Latin-1 Supplement chr(195).chr(128) => ''A'',chr(195).chr(129) => ''A'',chr(195).chr(130) => ''A'',chr(195).chr(131) => ''A'',chr(195).chr(132) => ''A'',chr(195).chr(133) => ''A'',chr(195).chr(135) => ''C'',chr(195).chr(136) => ''E'',chr(195).chr(137) => ''E'',chr(195).chr(138) => ''E'',chr(195).chr(139) => ''E'',chr(195).chr(140) => ''I'',chr(195).chr(141) => ''I'',chr(195).chr(142) => ''I'',chr(195).chr(143) => ''I'',chr(195).chr(145) => ''N'',chr(195).chr(146) => ''O'',chr(195).chr(147) => ''O'',chr(195).chr(148) => ''O'',chr(195).chr(149) => ''O'',chr(195).chr(150) => ''O'',chr(195).chr(153) => ''U'',chr(195).chr(154) => ''U'',chr(195).chr(155) => ''U'',chr(195).chr(156) => ''U'',chr(195).chr(157) => ''Y'',chr(195).chr(159) => ''s'',chr(195).chr(160) => ''a'',chr(195).chr(161) => ''a'',chr(195).chr(162) => ''a'',chr(195).chr(163) => ''a'',chr(195).chr(164) => ''a'',chr(195).chr(165) => ''a'',chr(195).chr(167) => ''c'',chr(195).chr(168) => ''e'',chr(195).chr(169) => ''e'',chr(195).chr(170) => ''e'',chr(195).chr(171) => ''e'',chr(195).chr(172) => ''i'',chr(195).chr(173) => ''i'',chr(195).chr(174) => ''i'',chr(195).chr(175) => ''i'',chr(195).chr(177) => ''n'',chr(195).chr(178) => ''o'',chr(195).chr(179) => ''o'',chr(195).chr(180) => ''o'',chr(195).chr(181) => ''o'',chr(195).chr(182) => ''o'',chr(195).chr(185) => ''u'',chr(195).chr(186) => ''u'',chr(195).chr(187) => ''u'',chr(195).chr(188) => ''u'',chr(195).chr(189) => ''y'',chr(195).chr(191) => ''y'',// Decompositions for Latin Extended-A chr(196).chr(128) => ''A'',chr(196).chr(129) => ''a'',chr(196).chr(130) => ''A'',chr(196).chr(131) => ''a'',chr(196).chr(132) => ''A'',chr(196).chr(133) => ''a'',chr(196).chr(134) => ''C'',chr(196).chr(135) => ''c'',chr(196).chr(136) => ''C'',chr(196).chr(137) => ''c'',chr(196).chr(138) => ''C'',chr(196).chr(139) => ''c'',chr(196).chr(140) => ''C'',chr(196).chr(141) => ''c'',chr(196).chr(142) => ''D'',chr(196).chr(143) => ''d'',chr(196).chr(144) => ''D'',chr(196).chr(145) => ''d'',chr(196).chr(146) => ''E'',chr(196).chr(147) => ''e'',chr(196).chr(148) => ''E'',chr(196).chr(149) => ''e'',chr(196).chr(150) => ''E'',chr(196).chr(151) => ''e'',chr(196).chr(152) => ''E'',chr(196).chr(153) => ''e'',chr(196).chr(154) => ''E'',chr(196).chr(155) => ''e'',chr(196).chr(156) => ''G'',chr(196).chr(157) => ''g'',chr(196).chr(158) => ''G'',chr(196).chr(159) => ''g'',chr(196).chr(160) => ''G'',chr(196).chr(161) => ''g'',chr(196).chr(162) => ''G'',chr(196).chr(163) => ''g'',chr(196).chr(164) => ''H'',chr(196).chr(165) => ''h'',chr(196).chr(166) => ''H'',chr(196).chr(167) => ''h'',chr(196).chr(168) => ''I'',chr(196).chr(169) => ''i'',chr(196).chr(170) => ''I'',chr(196).chr(171) => ''i'',chr(196).chr(172) => ''I'',chr(196).chr(173) => ''i'',chr(196).chr(174) => ''I'',chr(196).chr(175) => ''i'',chr(196).chr(176) => ''I'',chr(196).chr(177) => ''i'',chr(196).chr(178) => ''IJ'',chr(196).chr(179) => ''ij'',chr(196).chr(180) => ''J'',chr(196).chr(181) => ''j'',chr(196).chr(182) => ''K'',chr(196).chr(183) => ''k'',chr(196).chr(184) => ''k'',chr(196).chr(185) => ''L'',chr(196).chr(186) => ''l'',chr(196).chr(187) => ''L'',chr(196).chr(188) => ''l'',chr(196).chr(189) => ''L'',chr(196).chr(190) => ''l'',chr(196).chr(191) => ''L'',chr(197).chr(128) => ''l'',chr(197).chr(129) => ''L'',chr(197).chr(130) => ''l'',chr(197).chr(131) => ''N'',chr(197).chr(132) => ''n'',chr(197).chr(133) => ''N'',chr(197).chr(134) => ''n'',chr(197).chr(135) => ''N'',chr(197).chr(136) => ''n'',chr(197).chr(137) => ''N'',chr(197).chr(138) => ''n'',chr(197).chr(139) => ''N'',chr(197).chr(140) => ''O'',chr(197).chr(141) => ''o'',chr(197).chr(142) => ''O'',chr(197).chr(143) => ''o'',chr(197).chr(144) => ''O'',chr(197).chr(145) => ''o'',chr(197).chr(146) => ''OE'',chr(197).chr(147) => ''oe'',chr(197).chr(148) => ''R'',chr(197).chr(149) => ''r'',chr(197).chr(150) => ''R'',chr(197).chr(151) => ''r'',chr(197).chr(152) => ''R'',chr(197).chr(153) => ''r'',chr(197).chr(154) => ''S'',chr(197).chr(155) => ''s'',chr(197).chr(156) => ''S'',chr(197).chr(157) => ''s'',chr(197).chr(158) => ''S'',chr(197).chr(159) => ''s'',chr(197).chr(160) => ''S'',chr(197).chr(161) => ''s'',chr(197).chr(162) => ''T'',chr(197).chr(163) => ''t'',chr(197).chr(164) => ''T'',chr(197).chr(165) => ''t'',chr(197).chr(166) => ''T'',chr(197).chr(167) => ''t'',chr(197).chr(168) => ''U'',chr(197).chr(169) => ''u'',chr(197).chr(170) => ''U'',chr(197).chr(171) => ''u'',chr(197).chr(172) => ''U'',chr(197).chr(173) => ''u'',chr(197).chr(174) => ''U'',chr(197).chr(175) => ''u'',chr(197).chr(176) => ''U'',chr(197).chr(177) => ''u'',chr(197).chr(178) => ''U'',chr(197).chr(179) => ''u'',chr(197).chr(180) => ''W'',chr(197).chr(181) => ''w'',chr(197).chr(182) => ''Y'',chr(197).chr(183) => ''y'',chr(197).chr(184) => ''Y'',chr(197).chr(185) => ''Z'',chr(197).chr(186) => ''z'',chr(197).chr(187) => ''Z'',chr(197).chr(188) => ''z'',chr(197).chr(189) => ''Z'',chr(197).chr(190) => ''z'',chr(197).chr(191) => ''s'',// Euro Sign chr(226).chr(130).chr(172) => ''E'',// GBP (Pound) Sign chr(194).chr(163) => ''''); $string = strtr($string,$chars); } else { // Assume ISO-8859-1 if not UTF-8 $chars[''in''] = chr(128).chr(131).chr(138).chr(142).chr(154).chr(158) .chr(159).chr(162).chr(165).chr(181).chr(192).chr(193).chr(194) .chr(195).chr(196).chr(197).chr(199).chr(200).chr(201).chr(202) .chr(203).chr(204).chr(205).chr(206).chr(207).chr(209).chr(210) .chr(211).chr(212).chr(213).chr(214).chr(216).chr(217).chr(218) .chr(219).chr(220).chr(221).chr(224).chr(225).chr(226).chr(227) .chr(228).chr(229).chr(231).chr(232).chr(233).chr(234).chr(235) .chr(236).chr(237).chr(238).chr(239).chr(241).chr(242).chr(243) .chr(244).chr(245).chr(246).chr(248).chr(249).chr(250).chr(251) .chr(252).chr(253).chr(255); $chars[''out''] = "EfSZszYcYuAAAAAACEEEEIIIINOOOOOOUUUUYaaaaaaceeeeiiiinoooooouuuuyy"; $string = strtr($string,$chars[''in''],$chars[''out'']); $double_chars[''in''] = array(chr(140),chr(156),chr(198),chr(208),chr(222),chr(223),chr(230),chr(240),chr(254)); $double_chars[''out''] = array(''OE'',''oe'',''AE'',''DH'',''TH'',''ss'',''ae'',''dh'',''th''); $string = str_replace($double_chars[''in''],$double_chars[''out''],$string); } return self::replace_no_alpha_chars($string); } function replace_no_alpha_chars($url) { $url = strtolower(ereg_replace("[^a-zA-Z0-9]","-",trim($url))); // Saca los guiones repetidos $url = strtolower(ereg_replace(''-+'',''-'',($url))); // Saca el último guión en caso de que termine con uno if ($url[strlen($url)-1] == ''-'') $url = substr($url,strlen($url)-1); return $url; } function get_item_url($title,$id,$category = '''') { $beauty_category = $beauty_title = ''''; $beauty_title = self::get_beauty_url_string($title); if (strlen($category)) $beauty_category = self::get_beauty_url_string($category); $url = sprintf(SEO_ITEM_PATTERN,(strlen($beauty_category) ? "{$beauty_category}/" : "") . $beauty_title,$id); return $url; } function get_category_url($title,$id) { $beauty_title = self::get_beauty_url_string($title); $url = sprintf(SEO_CATEGORY_PATTERN,$beauty_title,$id); return $url; } function get_combo_url($title,$id) { $beauty_title = self::get_beauty_url_string($title); $url = sprintf(SEO_COMBO_PATTERN,$id); return $url; } }

你可以像这样使用它:

<a ref="<?= SEO::get_category_url("my super category",10)?>">My super category</a>

您将获得: http://www.example.com/my-super-category-cat-10 : http://www.example.com/my-super-category-cat-10

当然我的.htaccess:

RewriteRule ^(.*)-cat-([0-9]+)$ /simple/index.PHP?categoria_id=$2&estado=mostrar_categoria [L,QSA] RewriteRule ^(.*)-combo-([0-9]+)$ /simple/index.PHP?producto_id=$2&estado=mostrar_combo [L,QSA] RewriteRule ^(.*)-prod-([0-9]+)$ /simple/index.PHP?producto_id=$2&estado=mostrar_producto [L,QSA]

总结

以上是小编为你收集整理的.htaccess和seo友好的url全部内容。

如果觉得小编网站内容还不错,欢迎将小编网站推荐给好友。

301通过.htaccess将查询stringredirect到SEO友好的URL

301通过.htaccess将查询stringredirect到SEO友好的URL

我在我的.htaccess文件上写了一些代码,它允许使用SEO友好的URL而不是丑陋的查询string。 以下代码将浏览器中的SEO友好版本重写为服务器上的查询string版本。

RewriteEngine On RewriteRule ^SEO/([^/]*)/$ /directory/script.PHP?size=large&colour=green&pattern=$1 [L]

所以这个丑陋的

http://www.mysite.com/directory/script.PHP?size=large&colour=green&pattern=striped

现在是美丽的

OpenShift并在.htaccess中redirect

HTML文件作为Nginx中的PHP

htaccess删除.PHP,.html和尾部斜杠

codeigniter 3 – 删除index.PHP:在Linux上的错误404,但在Windows上工作正常

重写域和path

http://www.mysite.com/directory/SEO/striped/

只是为了解释一下代码; SEO是为URL添加更多关键字, /directory/是.htaccess文件所在的目录,参数size=large和colour=green永远不会改变,而pattern=$1可以是很多不同的值。

上面的代码完美地工作。 但是,问题是我现在坚持两个指向完全相同的内容的url。 为了解决这个问题,我想301将旧的,丑陋的查询stringredirect到SEO友好的URL。 到目前为止,我所尝试过的方法都行不通 – 而Google今天也不是特别友善。

任何人都可以提供工作代码,把我的.htaccess文件redirect到新的URL,同时保留重写? 谢谢!

用htaccess阻止特定的文件扩展名?

带锚链接的mod_rewrite

“RewriteEngine不允许在这里”使用XAMPP .htaccess错误

.htaccess更改需要多长时间才能生效?

我怎么能redirect到一个目录中的所有文件到另一个目录?

这应该做的伎俩:

RewriteEngine On

## Redirect to pretty urls # The '%1' in the rewrite comes from the group in the prevIoUs RewriteCond RewriteCond %{REQUEST_URI} !SEO RewriteCond %{QUERY_STRING} ^size=large&colour=green&pattern=([a-zA-Z]*)$ RewriteRule (.*) /directory/SEO/%1/? [L,R=301] ## Rewrite to long url,additional parameter at the end will cause ## the internal redirect not to match the prevIoUs rule (would cause redirect loop) RewriteRule ^directory/SEO/([^/]*)/$ /directory/script.PHP? size=large&colour=green&pattern=$1&rewrite [L]

您还可以根据需要匹配大小和颜色,也可以将它们更改为正则表达式组,并使用相应的%N

希望这可以帮助。

没有测试,但这可能工作…

RewriteRule ^ directory / script.PHP?size = large&color = green&pattern =(。*)$ / SEO / $ 1 /? [R = 301,NE,NC,L]

Java从给定的URL获取域名

Java从给定的URL获取域名

给定一个URL,我想提取域名(它不应包含“ www”部分)。网址可以包含h​​ttp / https。这是我编写的Java代码。尽管它似乎运行良好,但是有没有更好的方法或有一些极端的情况可能会失败。

public static String getDomainName(String url) throws MalformedURLException{    if(!url.startsWith("http") && !url.startsWith("https")){         url = "http://" + url;    }            URL netUrl = new URL(url);    String host = netUrl.getHost();    if(host.startsWith("www")){        host = host.substring("www".length()+1);    }    return host;}

输入:http : //google.com/blah

输出:google.com

答案1

小编典典

如果要解析URL,请使用java.net.URI。 java.net.URL有很多问题-它的equals方法进行DNS查找,这意味着与不可信输入一起使用时,使用它的代码可能容易受到拒绝服务攻击的攻击。

“戈斯林先生-为什么要使网址等于糟透了?” 解释了一个这样的问题。只是养成使用java.net.URI代替的习惯。

public static String getDomainName(String url) throws URISyntaxException {
URI uri = new URI(url);
String domain = uri.getHost();
return domain.startsWith(“www.”) ? domain.substring(4) : domain;
}
应该做你想做的。

尽管它似乎运行良好,但是有没有更好的方法或有一些极端的情况可能会失败。

你编写的代码对有效的URL无效:

  • httpfoo/bar-相对URL带有以http。开头的路径组件。
  • HTTP://example.com/-协议不区分大小写。
  • //example.com/ -主机的协议相对URL
  • www/foo-相对URL的路径部分以 www
  • wwwexample.com-这不域名开头www.,但开始用www

分层URL具有复杂的语法。如果你尝试不仔细阅读RFC 3986而推出自己的解析器,则可能会弄错。只需使用核心库中内置的一个即可。

如果你确实需要处理java.net.URI拒绝的混乱输入,请参阅RFC 3986附录B:

附录B.使用正则表达式解析URI引用
由于“首次匹配获胜”算法与POSIX正则表达式使用的“贪婪”消歧方法相同,因此使用正则表达式解析URI引用的潜在五个组成部分是自然而普遍的。

下一行是用于将格式正确的URI引用分解为其组件的正则表达式。

  ^(([^:/?#]+):)?(//([^/?#]*))?([^?#]*)(\?([^#]*))?(#(.*))?   12            3  4          5       6  7        8 9

上面第二行中的数字仅用于增强可读性。它们指示每个子表达式(即,每个成对的括号)的参考点。

Laravel 8路由到控制器 SEO友好的URL结构

Laravel 8路由到控制器 SEO友好的URL结构

我会将路径分为2个变量($slug$id),然后将其直接传递给控制器​​。

Route::get('{slug}-d{id}.html','DirectoryController@show')
    ->where(['slug' => '([a-z\-]+)','id' => '(\d+)']);

Route::get('{slug}-p{id}.html','PostController@show')
    ->where(['slug' => '([a-z\-]+)','id' => '(\d+)']);

在您的控制器中

class DirectoryController
{
    public function show(string $slug,int $id) {}
}

class PostController
{
    public function show(string $slug,int $id) {}
}
,

我可以看到两种实现此结果的方法:

创建一个中间控制器

Route::get('{path}','CheckPathController@redirect')

然后在CheckPathController中进行所有检查,并调用适当的控制器操作:

public function redirect(Request $request,$path) {
  // Your checks on $path,extract $id and content type

  if($isPost) {
     $controller = resolve(PostController::class);
     return $controller->show($request,$id);
  }

  if($isBusiness) {
     $controller = resolve(BusinessController::class);
     return $controller->show($request,$id);
  }

  // No matches,error 404
  abort(404);
}

复杂的正则表达式

请参阅:https://laravel.com/docs/8.x/routing#parameters-regular-expression-constraints

我不是正则表达式大师,这应该是可以匹配任何{word}-{word}-...-p{id}.html模式的基础,但是如果出现意外字符,它将崩溃

Route::get('{path}','PostController::show')
   ->where(['path' => '([\w]*-)*p[0-9]+\.html$']);

Route::get('{path}','BusinessController::show')
   ->where(['path' => '([\w]*-)*d[0-9]+\.html$']);

请注意,在这种情况下,您的控制器将收到拉$path字符串,因此您需要在其中提取ID。

,

您可以使用正则表达式匹配该子弹

Route::get('/{any}','YourController@methodName')->where(['any' => '.*(-d(.*?)\.).*']);

重复p

然后,当您使用控制器方法提取$ site时,可以使用正则表达式来获取该站点。

public function methodName($site)
{
    preg_match('/.*(-(d(.*?))\.).*/',$site,$parts); //or something similar,$parts[2] will have what you want
}

OR

这将为您的控制器方法提供d {number}或p {number}

Route::get('/{site}',function($site) {
    $code = preg_match('/.*(-(d(.*?)|p(.*?))\.).*/',$parts) ? $parts[2] : null;

    $controllerName = 'ControllerA';
    if(isset($code) && !is_null($code) && Str::contains($code,'p')) {
        $controllerName = 'ControllerB';
    }

    $controller = app()->make('App\Http\Controllers\Application\\' . $controllerName);

    return $controller->callAction('methodName',$params = ['code' => $code]);
})->where(['site' => '.*(-(d|p)(.*?)\.).*']);

关于mysql查询从给定的表结构创建SEO友好的urlmysql查询的结果创建一个表的问题就给大家分享到这里,感谢你花时间阅读本站内容,更多关于.htaccess和seo友好的url、301通过.htaccess将查询stringredirect到SEO友好的URL、Java从给定的URL获取域名、Laravel 8路由到控制器 SEO友好的URL结构等相关知识的信息别忘了在本站进行查找喔。

本文标签: