无需使用PHP重写Mod

无需使用PHP重写Mod,php,mod-rewrite,routing,Php,Mod Rewrite,Routing,目前,在我的PHP应用程序中使用.htaccess来选择要呈现的页面,因此,例如,如果URL是URL.com/register,那么它实际上是URL.com/index.PHP?page=register,它获取/Theme/register.html的内容 这是: RewriteEngine On RewriteRule ^(|/)$ index.php?page=$1 RewriteRule ^([a-zA-Z0-9/_-]+)(|)$ index.php?page=$1 RewriteRu

目前,在我的PHP应用程序中使用.htaccess来选择要呈现的页面,因此,例如,如果URL是URL.com/register,那么它实际上是URL.com/index.PHP?page=register,它获取/Theme/register.html的内容

这是:

RewriteEngine On
RewriteRule ^(|/)$ index.php?page=$1
RewriteRule ^([a-zA-Z0-9/_-]+)(|)$ index.php?page=$1
RewriteRule ^(.*)\.htm$ $1.php [NC]
问题是,我对此不满意,因为如果我想使用另一个GET参数,我会丢失这个“漂亮的url”。我见过其他不需要Mod rewrite的框架,我希望有人能给我一个简单和/或适当的例子来说明如何做,或者解释一下


谢谢

您可以定义应该将哪些类型的请求传递给index.php,即:register、delete等。。如果您在htaccess中硬编码,您仍然可以使用url中的其他子目录。或者在htaccess中添加一个subdir来定义此类请求,如www.yoursite.com/page/register

您可以定义哪些类型的请求应传递给index.php,即:register、delete等。。如果您在htaccess中硬编码,您仍然可以使用url中的其他子目录。或者在htaccess中添加一个subdir来定义此类请求,如www.yoursite.com/page/register

您可以在url中传递如下信息:

url.com/Theme/register

请参见您可以在url中传递如下信息:

url.com/Theme/register
请参见

您始终使用mod_rewrite,但在规则中不确定页面名称。您必须将其发送到php,然后使用php根据模式解析路径信息之外的适当细节。它被称为路由器。我不知道有任何独立的示例,因为它们通常与控制器实现紧密相关

您可以查看我对的回答,查看一些实现作为示例。

您始终使用mod_rewrite,但在规则中不确定页面名称。您必须将其发送到php,然后使用php根据模式解析路径信息之外的适当细节。它被称为路由器。我不知道有任何独立的示例,因为它们通常与控制器实现紧密相关


您可以查看我对的回答,以查看一些实现作为示例。

通常的方法是将所有内容*重定向到应用程序的主boostrap文件,通常是index.php

当我说所有内容时,我指的是不是公共文件系统中的文件或目录的所有URL。 通过这种方式,PHP获得了一项令人愉快的工作:解析URL,并动态计算应该呈现哪些页面以及传递了哪些参数

MVC路由器就是在这里诞生的,它们的任务是将URL分成若干段,并找出哪些段指示您应该使用某个控制器,哪些段表示控制器应该调用某个方法,哪些段是应该传递给方法调用的参数

例如,这种方法在WordPress中使用,URL解析是根据您可以在管理中指定的URL结构完成的

CakePHP也使用它,这是一个MVC框架,允许默认为以下URL结构:控制器\名称/方法\名称/参数\ 1:value \ 1/参数\ 2:value \ 2/。但是可以在任何程度上进行自定义,例如定义从URL提取参数的正则表达式

下面的代码是WordPress生成的默认.htaccess

<IfModule mod_rewrite.c>
    RewriteEngine On
    RewriteBase /
    RewriteRule ^index\.php$ - [L]
    RewriteCond %{REQUEST_FILENAME} !-f
    RewriteCond %{REQUEST_FILENAME} !-d
    RewriteRule . /index.php [L]
</IfModule>

通常的方法是将所有内容*重定向到应用程序的主boostrap文件,通常是index.php

当我说所有内容时,我指的是不是公共文件系统中的文件或目录的所有URL。 通过这种方式,PHP获得了一项令人愉快的工作:解析URL,并动态计算应该呈现哪些页面以及传递了哪些参数

MVC路由器就是在这里诞生的,它们的任务是将URL分成若干段,并找出哪些段指示您应该使用某个控制器,哪些段表示控制器应该调用某个方法,哪些段是应该传递给方法调用的参数

例如,这种方法在WordPress中使用,URL解析是根据您可以在管理中指定的URL结构完成的

CakePHP也使用它,这是一个MVC框架,允许默认为以下URL结构:控制器\名称/方法\名称/参数\ 1:value \ 1/参数\ 2:value \ 2/。但是可以在任何程度上进行自定义,例如定义从URL提取参数的正则表达式

下面的代码是WordPress生成的默认.htaccess

<IfModule mod_rewrite.c>
    RewriteEngine On
    RewriteBase /
    RewriteRule ^index\.php$ - [L]
    RewriteCond %{REQUEST_FILENAME} !-f
    RewriteCond %{REQUEST_FILENAME} !-d
    RewriteRule . /index.php [L]
</IfModule>

您仍然可以使用url.com/register?something=else&other=thing,只需在您的重写规则上使用[QSA]标志,这样它就可以组合来自重写规则的查询字符串。噢,非常感谢。那当然帮了大忙!你在挖苦人吗?不,我是认真的。这是一个可行且简单的解决方案——因此我投票支持它。好吧,听起来有点像sa
rcastic,我的错。你仍然可以使用url.com/register?something=else&other=thing,只需在重写规则上使用[QSA]标志,这样它就可以组合重写规则中的查询字符串。哦,非常感谢。那当然帮了大忙!你在挖苦人吗?不,我是认真的。这是一个可行且简单的解决方案——因此我投票支持它。好吧,那听起来有点讽刺,我的错。是的,没错!我想我可以用$\u SERVER['REQUEST\u URI']做类似的事情。你有没有一个我可以用来指导自己的例子?编辑:神童贴了一些例子,觉得我很好!没错!我想我可以用$\u SERVER['REQUEST\u URI']做类似的事情。你有没有一个我可以用来指导自己的例子?编辑:神童贴了一些例子,觉得我很好!太棒了,谢谢你的例子-我来看看!太棒了,谢谢你的例子-我来看看!