Apache 重写url重用文件名作为其基本参数

Apache 重写url重用文件名作为其基本参数,apache,.htaccess,url-routing,Apache,.htaccess,Url Routing,好吧,标题的措辞有点困难,但我对它的工作原理很感兴趣 假设我在根文件夹上有这个.htaccess RewriteEngine On RewriteCond %{REQUEST_FILENAME} !-f RewriteRule ^([^\.]+)$ $1.php [NC,L] 比如说 我有这个url,它包含任何内容 www.myurl.com/foo 如果我转到另一页,它会像 www.myurl.com/foo/bar 也就是说,一旦我重定向到其他页面,我将使用foo作为它们的基础 所以我

好吧,标题的措辞有点困难,但我对它的工作原理很感兴趣

假设我在根文件夹上有这个.htaccess

RewriteEngine On
RewriteCond %{REQUEST_FILENAME} !-f
RewriteRule ^([^\.]+)$ $1.php [NC,L]
比如说

我有这个url,它包含任何内容

www.myurl.com/foo
如果我转到另一页,它会像

www.myurl.com/foo/bar
也就是说,一旦我重定向到其他页面,我将使用
foo
作为它们的基础

所以我的根文件夹结构是

index.php
foo.php
bar.php
因此,如果
www.myurl.com/foo
我正在打开
foo.php
,但是如果我访问
www.myurl.com/foo/bar
我正在打开
bar.php
,文件名的基础是
foo.php
。逻辑上认为这是错误的

但有没有办法做到这一点

真正想要的结果是

www.myurl.com/campetings

如果我转到活动的子页面,它将是

www.myurl.com/magnetics/create


任何帮助都将不胜感激。

为了实现这一点,您需要一个路由器;Apache重写工具不适合单独处理此问题。通常,您使用一个前端控制器(通常称为index.php),所有内容都将重写到该控制器,并将整个url作为参数传递。然后,前端控制器启动路由器,路由器启动正确的控制器来处理请求

然后,您的.htaccess看起来像:

<IfModule mod_rewrite.c>
    RewriteEngine On
    RewriteCond %{REQUEST_FILENAME} !-f
    RewriteRule ^(.*)$ index.php [QSA,L]
</IfModule>

重新启动发动机
重写cond%{REQUEST_FILENAME}-F
重写规则^(.*)$index.php[QSA,L]

请看,并阅读的第一章,了解这一切是如何运作的。

无论如何,感谢您的回答@Bryan Agee

我发现了一个关于URL重写的很棒的网站,特别是对于那些甚至不知道它是如何工作的人,包括我在内

对于任何感兴趣的人,这里是它的链接

这很容易理解

关于我问题的解决方案,在这里

RewriteEngine On

RewriteRule   ^campaigns/?$             src/campaigns/index.php [NC]
RewriteRule   ^campaigns/create/?$          src/campaigns/create.php [NC]
如果我想把参数放在链接上

#RewriteRule   ^campaigns/create/(.+)$   src/campaigns/create.php?cid=$1 [L]
如需进一步了解,请访问上面的链接:D