这对于标题的措辞来说有点困难,但我对这件事的运作方式很感兴趣。
假设我的根文件夹中有.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
任何帮助都将不胜感激。
答案 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