.htaccess 搜索引擎和用户友好的 URL
Posted
技术标签:
【中文标题】.htaccess 搜索引擎和用户友好的 URL【英文标题】:.htaccess Search Engine & User Friendly URL's 【发布时间】:2016-12-02 19:12:12 【问题描述】:网站结构:
站点根目录 /Desktop/ - 对于在 domain.com 上看到的所有内容 /Mobile/ - 对于在 m.domain.com 上看到的所有内容 /Admin/ - 对于在 admin.domain.com 上看到的所有内容.htaccess
RewriteEngine On
Options FollowSymLinks
RewriteRule ^([-_a-zA-Z0-9]*)/([-_a-zA-Z0-9]*)/([-_a-zA-Z0-9]*)$ $1.php?id=$2&name=$3
我尝试将其放在SITE ROOT
和/Desktop/
。
问题
我已经建立了一个测试页面domain.com/company.php
,里面只有<h1>Hello World</h1>
。
转至:http://domain.com/company.php?company_id=74&name=DesignSourceLtd
“Hello World”显示
转至:http://domain.com/company/74/DesignSourceLtd
显示 404 页面。
问题
如何使我的 URL 搜索引擎和用户友好且 company
的所有前面“页面”都显示 company.php
模板?
【问题讨论】:
【参考方案1】:解决方案 1
您可以通过像这样创建 .htaccess 文件来处理 index.php 中的所有 URI(因此您可以根据需要处理任何参数以及其他好处):
RewriteEngine On
RewriteCond %REQUEST_FILENAME !-f
RewriteCond &REQUEST_FILENAME !-d
RewriteRule ^(.*)$ index.php/$1 [QSA,NC,L]
使用explode('/',$_SERVER['REQUEST_URI'])
访问参数,可以包含company.php
解决方案 2
您可以为 company.php 创建一个特定的句柄
Options +FollowSymLinks
RewriteEngine On
RewriteCond %REQUEST_FILENAME !-f
RewriteCond &REQUEST_FILENAME !-d
RewriteRule ^company\/([-_a-zA-Z0-9]*)\/([-_a-zA-Z0-9]*)$ company.php?company_id=$1&name=$2[QSA,NC,L]
解决方案 2 没有捕获第一个 url 参数,因为您的 GET 查询对 company.php 是特殊的
【讨论】:
我不熟悉这种不创建大量页面并让 PHP 通过数据库表为您创建所有页面的方法。因此,如果我想要 tutorials.php、forums.php、this.php 和 that.php 都具有不同的模板,我会使用创建多个RewriteRule
的第二个解决方案,如果没有,您能否扩展一下第一个解决方案?
如果您要使用不同的模板,您肯定应该使用第一个解决方案。在一个页面内处理所有请求将为您提供真正灵活的代码。无论如何,如您所知,我们正在使用explode('/'..
分解URI,这意味着如果我要加载一个文件,则文件名是从explode 函数返回的数组的第一项。因此,您可以轻松地包含该文件并将其他展开的项目用作页面的参数。
你也可以看看它的想法:github.com/klein/klein.php如果你不明白该怎么做,我很乐意提供更多帮助。
您能解释一下^(.*)$ index.php/$1 [QSA,NC,L]
,index.php/$1
是如何指代this.php
或that.php
之类的吗?我需要index.php
还是我可以上传company.php
、users.php
之类的模板?【参考方案2】:
您的选项应该是Options +FollowSymLinks
- 但是不确定这是否会影响结果。您的正斜杠也应该被转义。试试 regex101.com 测试一下。
见https://regex101.com/r/PQpiLt/1
【讨论】:
更简洁的版本:regex101.com/r/PQpiLt/2 要记住的是,您可能想要使用路由器,否则您将不得不编写很多重写...例如,如果用户想要去“/company”或“/companies”查看列表页面? 哇,这看起来像是一个非常高级的有用源链接。我不是很明白,但我想我明白你在说什么。就像我想要 forums.php 和 company.php 和 this.php 一样? 这就是像 laravel 这样的框架派上用场的地方,它允许你定义路由等等。您可以使用 /company.php - 没关系,但它与您查看单个公司的操作不一致。以上是关于.htaccess 搜索引擎和用户友好的 URL的主要内容,如果未能解决你的问题,请参考以下文章
如何使用 .htaccess 和 php 制作用户友好的 url
如何设置 htaccess 以从用户友好的 URL 获取参数以与 JS 一起使用
htaccess url 重新样式化图像 url 到 seo 友好