【问题标题】:.htaccess Search Engine & User Friendly URL's.htaccess 搜索引擎和用户友好的 URL
【发布时间】: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 模板?

【问题讨论】:

    标签: php .htaccess


    【解决方案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 - 没关系,但它与您查看单个公司的操作不一致。
    猜你喜欢
    • 2021-06-12
    • 2012-06-18
    • 2011-12-24
    • 1970-01-01
    • 2013-10-16
    • 2011-08-31
    • 2011-02-15
    • 1970-01-01
    • 2014-11-09
    相关资源
    最近更新 更多