可能重复:
.htaces可以创建友好的URL。需要的帮助
我想创建一个网站,通过PHP从MySQL数据库加载内容,同时仍在为搜索引擎进行优化。
我已经考虑了几种方法,并正在寻找一些关于哪种方法最好的建议。
我网站上的用户会填写一份表格并提交,然后保存在SQL数据库中。我想拥有它,这样每个新页面都可以像这样访问:
- domain.com/plugins/任何内容
- domain.com/plugins/其他页面名称
一些方法:1.提交表单时,脚本会在插件文件夹中生成一个静态HTML页面。当页面被编辑时(会有一个编辑按钮),HTML页面会被更新的信息覆盖。
- domain.com/plugins/任何和domain.com/plugins/其他页面名称都将重定向到PHP脚本
然而,我不知道如何创建.htaccess,它将允许PHP脚本获取页面名称,以便它可以搜索SQL数据库并获得正确的信息。
我也不确定搜索引擎会如何处理这些页面?
- 也许其他人可以想出一个更好的方法
提前感谢您的帮助。
关于如何做到这一点,您有几个选项。符合您需求的最简单方法是将以下内容添加到.htaccess文件中:
RewriteEngine on
RewriteRule ^/plugins/(.*)$ /yourscript.php?plugin=$1 [L]
以上操作将所有对/plugins/anything
的请求传递给yourscript.php,您可以从中使用$_GET['plugin']
访问插件名称。
如果"插件"只是一个例子,并且您希望能够使用/anything/anything
,那么您可能希望将所有请求传递到PHP脚本,然后解析请求的URL。
要做到这一点,你可以在.htaccess文件中使用这样的东西:
RewriteEngine on
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule . /yourscript.php [L]
为了打破这一点,上面的命令告诉Apache将文件不存在的所有请求(即images/css/js等)重写为yourscript.php。
从那里,您可以通过$_SERVER['REQUEST_URI']
访问整个URL。您可以用字符串函数、正则表达式等进行分解。
为什么不制作一个实际的目录?例如
domain.com/plugins/whathingdomain.com/plugins/anotheragename
whatever和另一个页面名称都将是目录。然后将html文件写为目录中的index.html。不需要htaccess,您仍然可以使用与上面相同的url进行访问。
我不知道您是否在使用任何框架。我有使用codeigniter
的解决方案。同样的情况也可以使用其他框架/核心PHP进行模拟。
codeigniter
特异性溶液:
-
在config/routes.php中定义
$route['plugins/(:any)']="plugins/getPageFromDb/$1";在此之后,在浏览器中,url将是相同的"domain.com/plugins/anything",但实际控制将使用"anything"作为参数来点击"plugins"控制器的"getPageFromDb"函数。
-
在"getPageFromDb"函数中,您应该编写代码,根据参数"whatever"从数据库中获取页面,并直接或通过视图模板回显输出(取决于您的逻辑/场景)。
为了提高性能,您可以保留html页面的静态版本,并在"getPageFromDb"函数中编写一个相对检查,以决定是从静态还是从数据库获取页面。
考虑到url格式和格式良好的HTML呈现,它应该是搜索引擎友好的页面。