.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.phpthat.php 之类的吗?我需要index.php 还是我可以上传company.phpusers.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 友好

SEO工具箱:PHP自动生成PHPCMS伪静态规则.htaccess

.htaccess 用于友好的 URL

htaccess 重写和重定向 SEO 友好的 URL