【问题标题】:.htaccess for friendly URL with multiple variables.htaccess 用于具有多个变量的友好 URL
【发布时间】:2014-05-29 00:42:51
【问题描述】:

我正在努力使我的网站对我目前使用的 SEO 更友好

RewriteEngine On
RewriteRule (.*)$ index.php?page=$1

site.co.uk/index.php?page=page_name变成site.co.uk/page_name

我也想将它用于子页面。 我试过这个:

RewriteEngine On
RewriteRule (.*)/(.*)$ index.php?page=$1&subpage=$2

但它不工作,它运行 site.co.uk/page_name/sub_page 但是当你转到 site.co.uk/page_name 它返回 404 未找到。

我希望它运行 site.co.uk/page_name 并返回 page_name

site.co.uk/page_name/sub_page 并返回 sub_page

等等

site.co.uk/page_name/sub_page/sub_page2/...

【问题讨论】:

    标签: php .htaccess mod-rewrite url-rewriting


    【解决方案1】:

    仅使用:

    RewriteEngine On
    Options -Indexes
    RewriteCond %{REQUEST_FILENAME} !-f
    RewriteRule ^(.*)$ index.php?page=$1 [L,QSA]
    

    很好,然后您可以在脚本中路由请求。

    你用explode()分隔符/分割页面变量,然后设置变量。

    $route = explode('/',$_GET['page']);
    
    $page    = isset($route[0]) ? $route[0] : null;
    $subpage = isset($route[1]) ? $route[1] : null;
    $yada    = isset($route[2]) ? $route[2] : null;
    

    许多 MVC 框架都使用这种方法。它叫做路由。

    【讨论】:

    • +1 因为它是最简单和最灵活的。您甚至可以通过解析 REQUEST_URI 来完成此操作而无需传递“页面”。如果您有可浏览的目录,还可以添加“RewriteCond %{REQUEST_FILENAME} !-d”。
    • 非常感谢你,我多年来一直在为这个.htaccess 是我唯一不确定的事情。谢谢@Lawrence Cherone
    • 我使用RewriteRule ^(.*)$ $1.php 隐藏扩展我如何在名为portal.php 的页面上使用RewriteRule ^(.*)$ index.php?page=$1 [L,QSA]portal 具有重写规则)来做同样的事情,但就像(@ 987654327@ 作为页面)和RewriteRule ^(.*)$ index.php?page=$1 [L,QSA] 喜欢 ¬RewriteRule ^(.*)$ portal/?page=$1 [L,QSA]` 或类似的东西。
    猜你喜欢
    • 2016-02-03
    • 2011-08-23
    • 2012-06-07
    • 2015-03-04
    • 1970-01-01
    • 2013-08-22
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多