Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/.htaccess/5.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Php 动态创建URL_Php_.htaccess_Url_Mod Rewrite_Url Rewriting - Fatal编程技术网

Php 动态创建URL

Php 动态创建URL,php,.htaccess,url,mod-rewrite,url-rewriting,Php,.htaccess,Url,Mod Rewrite,Url Rewriting,真正让我困惑的是网站是如何有URL的,比如: -及- 最初,我认为您可以简单地创建一个php文件并在.htaccess中使用URL重写。例如: (这根本没有道理) 显然,情况并非如此,因为它不仅对更多后续斜杠无效,而且诸如Wordpress之类的CMS会自动生成“动态”URL的内容,如果URL无法识别,则会重定向到301页面 我想在我的网站上实现这一点,但我完全不知道如何实现这一点。我正在努力深入研究这个话题,因为我自己不知道这个系统实际上是什么。显然,我完全错了,这让我感到困

真正让我困惑的是网站是如何有URL的,比如:

-及-

最初,我认为您可以简单地创建一个php文件并在.htaccess中使用URL重写。例如:

  • (这根本没有道理)
显然,情况并非如此,因为它不仅对更多后续斜杠无效,而且诸如Wordpress之类的CMS会自动生成“动态”URL的内容,如果URL无法识别,则会重定向到301页面

我想在我的网站上实现这一点,但我完全不知道如何实现这一点。我正在努力深入研究这个话题,因为我自己不知道这个系统实际上是什么。显然,我完全错了,这让我感到困惑

如果有人能解释这个系统叫什么,我怎么能做到。我不想被填鸭式的代码,我只需要有人给我解释一下

编辑:经过进一步的研究,我找到了一个完美的例子,使我的问题更清楚。请注意以下url:

与以下url相同:

但显示不同的内容,这是一个全新的页面,正在“动态”创建

然后是来自同一站点的更多随机URL:

谢谢,
Sutton

因此,如果您使用像这样的框架,这是一种非常简单的路由方法

每个项目中都有一个“routes.php”文件,该文件定义对URL的调用,并使用controllers方法进行响应。这通常会返回一个视图。 它使创建这样的内容与添加这样的行一样容易

Route::get('home', 'PagesController@home');
当您转到example.com/home时,它将启动名为“PagesController”的控制器并运行其home方法。在这个方法中,您可以返回一个视图,该视图将是您想要显示的页面

这可以通过其他方式扩展。 您可以有另一条几乎相同的路由,但是当有人向同一控制器发送post数据时,可以有另一种方法

Route::post('home', 'PagesController@submittedhome');
因此,现在您有了另一个路由,它将post输入到该页面,并从同一控制器触发一个完全不同的方法。这些控件+更多控件可以让您轻松实现您想要的,并且是laravel核心基础的一部分


以下是laravel页面上的内容,可以为您提供更多的启发

因此,如果您使用像这样的框架,这是一种非常简单的路由方式

每个项目中都有一个“routes.php”文件,该文件定义对URL的调用,并使用controllers方法进行响应。这通常会返回一个视图。 它使创建这样的内容与添加这样的行一样容易

Route::get('home', 'PagesController@home');
当您转到example.com/home时,它将启动名为“PagesController”的控制器并运行其home方法。在这个方法中,您可以返回一个视图,该视图将是您想要显示的页面

这可以通过其他方式扩展。 您可以有另一条几乎相同的路由,但是当有人向同一控制器发送post数据时,可以有另一种方法

Route::post('home', 'PagesController@submittedhome');
因此,现在您有了另一个路由,它将post输入到该页面,并从同一控制器触发一个完全不同的方法。这些控件+更多控件可以让您轻松实现您想要的,并且是laravel核心基础的一部分

以下是laravel页面上的内容,可以为您提供更多的启发

如果有人能解释一下这个系统叫什么

它被称为
RewriteEngine
,是apache的一部分,其他web服务器有不同的mod,但这是最流行的

RewriteEngine  on
RewriteRule    ^shop/$  shop.php  [L]
RewriteRule    ^shop/products/(.*?)/$  products.php?type=$1  [L]

当用户访问
www.site.com/shop/

如果用户访问www.site.com/shop/products/games/


[L]
-称为标志(
L | last
):

[L]
标志导致mod_rewrite停止处理规则集。在里面 在大多数上下文中,这意味着如果规则匹配,就没有其他规则 将被处理。这对应于Perl中的最后一个命令,或者 C中的break命令。使用此标志指示当前 应立即应用该规则,而不考虑进一步的规则


^
相对于web根目录(
somesite.com/^

$
表示字符串的结尾(
somesite.com/^somedir/test/$将不处理此部分


资源:

了解更多关于和

如果有人能解释一下这个系统叫什么

它被称为
RewriteEngine
,是apache的一部分,其他web服务器有不同的mod,但这是最流行的

RewriteEngine  on
RewriteRule    ^shop/$  shop.php  [L]
RewriteRule    ^shop/products/(.*?)/$  products.php?type=$1  [L]

当用户访问
www.site.com/shop/

如果用户访问www.site.com/shop/products/games/


[L]
-称为标志(
L | last
):

[L]
标志导致mod_rewrite停止处理规则集。在里面 在大多数上下文中,这意味着如果规则匹配,就没有其他规则 将被处理。这对应于Perl中的最后一个命令,或者 C中的break命令。使用此标志指示当前 应立即应用该规则,而不考虑进一步的规则。