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

时间:2014-04-08 03:34:19

标签: apache .htaccess url-routing

这对于标题的措辞来说有点困难,但我对这件事的运作方式很感兴趣。

假设我的根文件夹中有.htaccess。

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

例如

我有这个网址,包含它的任何内容。

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,其文件名为{{1} }}。逻辑上认为这是错误的。

但有没有办法做到这一点?

真实的期望结果是..

foo.php

如果我转到广告系列的子页面,那将是

www.myurl.com/campaigns

任何帮助都将不胜感激。

2 个答案:

答案 0 :(得分:1)

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

你的.htaccess看起来像是:

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

查看Symfony router component,并阅读Symfony book的第一章,了解一切如何运作的一般概念。

答案 1 :(得分:0)

无论如何,感谢@Bryan Agee的答案。

我找到了一个很好的网站,讨论网址重写,特别是那些甚至不知道它包括我的工作方式的人。

对任何有兴趣的人,这是它的链接。

http://coding.smashingmagazine.com/2011/11/02/introduction-to-url-rewriting/

这很容易理解。

对于我的问题的解决方案,这里是。

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