【问题标题】:How to create seo friendly urls with php and htaccess?如何使用 php 和 htaccess 创建 seo 友好的 url?
【发布时间】:2015-11-03 15:04:45
【问题描述】:

我正在尝试使用 htaccess 文件和 PHP 生成对 seo 友好的 url。但它不起作用。

我在 localhost(运行 XAMPP)中尝试了下面的代码

RewriteEngine On
RewriteBase /real/

RewriteRule ^property-details/([0-9a-zA-Z]+) property-details.php?pid=$1 [NC, L]

【问题讨论】:

  • 在提问时准确解释什么是“不工作”很有用。 “不工作”并不是特别有用。

标签: php .htaccess seo friendly-url


【解决方案1】:

有不同的方法可以达到相同的结果,但这将为您提供指导。

首先激活 mod_rewrite 取消注释 httpd.conf 或 apache2.conf 文件中的这一行:

LoadModule rewrite_module libexec/apache2/mod_rewrite.so

将 AllowOverride 从 none 更改为 All 到您的 www 目录

    <Directory />
        AllowOverride All 
        Require all denied
    </Directory>

重启apache:

sudo apachectl restart

    sudo service apache2 restart

在您的 www 文件夹中,创建一个 .htaccess 文件并添加:

    # | SEO URL                                                                                
    Options +FollowSymLinks  
    RewriteEngine On  
    RewriteCond %{SCRIPT_FILENAME} !-d  
    RewriteCond %{SCRIPT_FILENAME} !-f  
    RewriteRule ^.*$ ./index.php

然后在你的 index.php 文件中:

<?php
    $url_params=get_url_params();

    // then access your url_params
    if (isset($url_params[1]))
    {
        switch ($url_params[1]) 
        {
            case 'login':
                    echo "<h1>Login</h2>";
                break;

            case 'contact':
                    echo "<h1>Cantact</h2>";
                break;

            default:
                echo "<h1>Home</h2>";
                break;
        }

    }

    function get_url_params($site_url='')
    {
        $base_url=explode("/", $site_url);
        $request  = $_SERVER['REQUEST_URI'];
        $url_params = explode("/", $request);
        $delete_extensions=array('.html','.htm');
        $data[]=array();
        foreach ($base_url as $b)
        {
            unset( $url_params[array_search( "$b", $url_params )] );
        }
        foreach ($url_params as $u)
        {
            foreach ($delete_extensions as $e){
                $u=str_replace($e, "", $u);
            }
            $data[]=$u;
        }
        return $data;
    }
    ?>

【讨论】:

    【解决方案2】:

    [NC, L]

    您需要删除 RewriteRule 标志之间的空格。这将导致 500 Internal Server 错误 - 在这种情况下,您应该检查错误日志以查找更有意义的错误。应该写成:

    [NC,L]
    

    没有空格。


    更新: 要使 mod_rewrite 在每个目录的 .htaccess 文件中工作,还必须启用 FollowSymLinks(如果尚未启用)。在 .htaccess 文件的最顶部,包括:

    Options +FollowSymLinks
    

    【讨论】:

    • tanq w3d。但网址仍然没有改变。实际上我正在 xampp(localhost) 中尝试,所以有什么问题..?
    • 最初我收到 500 个内部服务器错误,现在该错误在编辑你提到的代码后没有出现,但所需的 url 没有出现。(实际上我的原始 url 没有变化)
    • 请在您的问题中说明您请求的确切网址和期望的结果。
    • 我的实际网址是“property-details.php?pid=PID1”,所需的网址是“property-details.php/PID1”
    • 我假设您的意思是property-details/PID1 即。在所需的 URL 中没有 .php?您问题中的代码表明您的 actual URL/real/property-details.php?pid=PID1 - 在 /real 子目录中 - 不是这样吗?我已经更新了我的答案。
    猜你喜欢
    • 2015-07-07
    • 2014-12-04
    • 2011-05-09
    • 2017-11-08
    • 2012-08-21
    • 2013-02-03
    • 2015-04-08
    • 2021-07-23
    • 1970-01-01
    相关资源
    最近更新 更多