对于想了解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查询的结果创建一个表)
- .htaccess和seo友好的url
- 301通过.htaccess将查询stringredirect到SEO友好的URL
- Java从给定的URL获取域名
- Laravel 8路由到控制器 SEO友好的URL结构
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
我们现在有一个电子商务网站,有一系列的品牌。 品牌页面包含以下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
我在我的.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获取域名
给定一个URL,我想提取域名(它不应包含“ www”部分)。网址可以包含http / 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/
-主机的协议相对URLwww/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结构
我会将路径分为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友好的url和mysql查询的结果创建一个表的问题就给大家分享到这里,感谢你花时间阅读本站内容,更多关于.htaccess和seo友好的url、301通过.htaccess将查询stringredirect到SEO友好的URL、Java从给定的URL获取域名、Laravel 8路由到控制器 SEO友好的URL结构等相关知识的信息别忘了在本站进行查找喔。
本文标签: