【问题标题】:SEO friendly url using php [duplicate]使用 php 的 SEO 友好 URL [重复]
【发布时间】:2013-09-20 06:35:54
【问题描述】:

我正在尝试使用 php 制作对 SEO 友好的网站...

在 jcheck 文件夹中,我有一个 index.php 文件,它以一个参数“id”作为输入。

mydomain.com/jcheck/index.php?id=1 works

我怎样才能做到如下

mydomain.com/jcheck/1

我尝试过制作 .htaccess 文件并把

RewriteEngine on

RewriteCond %{REQUEST_URI} 1/
RewriteRule 1/ http://mydomain.com/jcheck/index.php?id=1

我怎样才能让它工作?

【问题讨论】:

    标签: php html .htaccess seo


    【解决方案1】:

    您基本上可以通过两种方式做到这一点:

    带有 mod_rewrite 的 .htaccess 路由

    在您的根文件夹中添加一个名为 .htaccess 的文件,然后添加如下内容:

    RewriteEngine on
    RewriteRule ^/Some-text-goes-here/([0-9]+)$ /picture.php?id=$1
    

    这将告诉 Apache 为该文件夹启用 mod_rewrite,如果它被询问与正则表达式匹配的 URL,它会在内部将其重写为您想要的内容,而最终用户不会看到它。简单但不灵活,因此如果您需要更多功能:

    PHP 路线

    将以下内容放入您的 .htaccess 中:

    FallbackResource index.php
    

    这将告诉它运行您的 index.php 来处理通常无法在您的站点中找到的所有文件。例如,您可以在其中:

    $path = ltrim($_SERVER['REQUEST_URI'], '/');    // Trim leading slash(es)
    $elements = explode('/', $path);                // Split path on slashes
    if(count($elements) == 0)                       // No path elements means home
        ShowHomepage();
    else switch(array_shift($elements))             // Pop off first item and switch
    {
        case 'Some-text-goes-here':
            ShowPicture($elements); // passes rest of parameters to internal function
            break;
        case 'more':
            ...
        default:
            header('HTTP/1.1 404 Not Found');
            Show404Error();
    }
    

    这就是大型网站和 CMS 系统的做法,因为它在解析 URL、配置和依赖于数据库的 URL 等方面提供了更大的灵活性。对于零星使用,.htaccess 中的硬编码重写规则会很好。

    *****从URL rewriting with PHP**复制此内容

    【讨论】:

    • 这是第二个很酷的解决方案,但它不比第一个慢吗?
    • 对我来说,count($elements) 包含一个用于 root 调用 (home) 的空字符串。它可以用空字符串的大小写(即case '':)来捕获。此外,FallbackResource index.php 在 root 上失败了。相反,我使用来自 link 的传统 mod_rewrite 让它工作。
    • 我有很多和上面一样的网址。因此,使用 mod_rewrite 在 .htaccess 路由中一一定义。如果你有可能一次定义。请快速回答
    【解决方案2】:

    在 jcheck 目录的 htaccess 文件中,使用以下规则:

    RewriteEngine On
    RewriteBase /jcheck/
    RewriteCond %{REQUEST_FILENAME} !-f
    RewriteCond %{REQUEST_FILENAME} !-d
    RewriteRule ^([0-9]+)/?$ index.php?id=$1 [L,QSA]
    

    【讨论】:

    • 在此服务器上找不到请求的 URL /jcheck/3。
    • @user1853803 你确定你的 htaccess 文件正在被处理吗?这些规则在空白 htaccess 文件中对我来说很好
    • 是否有权限或需要设置的东西
    • @user1853803 你需要在你的虚拟主机/服务器配置中使用AllowOverride FileInfoAllowOveride All
    • 如何检查 .htaccess 文件是否已处理
    【解决方案3】:

    试试这个:

    RewriteRule ^jcheck/([0-9]+)$ jcheck/index.php?id=$1
    

    【讨论】:

    • 输入网址会得到什么?
    • 未找到 在此服务器上未找到请求的 URL /jcheck/3/。
    【解决方案4】:
    RewriteEngine on
    RewriteRule ^/jcheck/([0-9]+)$ /jcheck/index.php?id=1
    

    另请参阅here这对你很有用

    【讨论】:

    【解决方案5】:

    将.htaccess文件放入jcheck文件夹并写入:

    RewriteEngine on
    
    RewriteCond %{REQUEST_FILENAME} !-f
    RewriteCond %{REQUEST_FILENAME} !-D
    RewriteRule ^1/?$ index.php?id=1
    

    【讨论】:

    • 它不工作给我 404 not found 错误
    • @user1853803 你把.htaccess文件放在jcheck里面了吗?
    • 是的,我已将 .htaccess 放入 jcheck
    • 你能分享你的真实网址吗?我猜它现在的缓存问题
    猜你喜欢
    • 2016-04-13
    • 1970-01-01
    • 2011-05-09
    • 2018-05-22
    • 2013-06-19
    • 2011-02-24
    • 2014-10-06
    • 1970-01-01
    • 2012-08-21
    相关资源
    最近更新 更多