Php .htaccess用于具有多个变量的友好URL

Php .htaccess用于具有多个变量的友好URL,php,.htaccess,mod-rewrite,url-rewriting,Php,.htaccess,Mod Rewrite,Url Rewriting,我正在努力使我的网站更加SEO友好,我目前正在使用 RewriteEngine On RewriteRule (.*)$ index.php?page=$1 将site.co.uk/index.php?page=page\u name转换为site.co.uk/page\u name 我还想将其用于子页面。 我试过这个: RewriteEngine On RewriteRule (.*)/(.*)$ index.php?page=$1&subpage=$2 但它不工作,它运行site

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

RewriteEngine On
RewriteRule (.*)$ index.php?page=$1
site.co.uk/index.php?page=page\u name
转换为
site.co.uk/page\u name

我还想将其用于子页面。 我试过这个:

RewriteEngine On
RewriteRule (.*)/(.*)$ index.php?page=$1&subpage=$2
但它不工作,它运行
site.co.uk/page\u name/sub\u page
,但当您转到
site.co.uk/page\u name
时,它返回404 not found

我希望它运行
site.co.uk/page\u name
并返回
page\u name

site.co.uk/page\u name/sub\u page
并返回
sub\u page

等等

site.co.uk/page\u name/sub\u page/sub\u page2/…
只需使用:

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因为它最简单、最灵活。您甚至可以通过解析请求URI而不传递“页面”。如果你有可浏览的目录,也可以加上“RewriteCond%{REQUEST_FILENAME}!-d”。非常感谢你,我一直在思考这个问题。htaccess是我唯一不确定的事情。谢谢@Lawrence Cheroneim使用
RewriteRule^(.*)$$1.php
隐藏exstention我如何使用
RewriteRule^(.*)$index.php?page=$1[L,QSA]
在一个名为
portal.php
的页面上使用
portal
的重写规则)来做同样的事情,但像(
portal/
作为页面)和
rule>一样^(.*)$index.php?page=$1[L,QSA]
比如重写规则(.*)$portal/?page=$1[L,QSA]`之类的东西。