删除文件扩展名并允许“伪目录”?

时间:2012-10-20 00:56:31

标签: php apache .htaccess url mod-rewrite

我正在创建一个相当简单的网站。根文件夹中有两个静态页面(Home和Portfolio),/blog中有Wordpress。静态页面包括使用require_once("blog/wp-config.php");的Wordpress。

投资组合页面将使用Javascript(History.JS或Crossroads / Hasher)来“推送”代表类别和专辑的网址。例如,点击左侧的“婚礼”将生成portfolio/weddings,相册将为portfolio/weddings/jane-jon-smith。直接访问时,这些文件需要可用(我发给你一个专辑链接)。

现在,我已将其设置为可以从index.phpportfolio.php访问静态页面。我能够使用以下.htaccess指令删除文件扩展名:

# Remove .php-extension from url
RewriteCond %{REQUEST_FILENAME} !-d
RewriteCond %{REQUEST_FILENAME}\.php -f
RewriteRule ^([^\.]+)/$ $1.php [L]

但是当我尝试访问诸如portfolio/weddings之类的URL时,我收到404错误,因为它不是有效的目录或文件。我一直在寻找,但似乎找不到任何相关的东西,除了如何删除扩展(我已经工作)。

如何删除文件扩展名并允许直接访问这些“假”目录?

2 个答案:

答案 0 :(得分:0)

Wordpress使用前端控制器来创建你所谓的“伪目录”。它获取url的参数,并相应地将其路由到应用程序控制器以构建视图层或客户端看到的内容。

为了让Wordpress相应地路由此请求,您需要为每个项目组合条目提供相应的页面。您可以使用Wordpress的默认功能来执行此操作。撤消对.htaccess文件的更改,而是将“设置”中的“固定链接”设置更改为“帖子名称”。

使用内置的动态组合可能比为静态页面自定义滚动“小部件”更容易。您的静态页面可以设置为显示具有正确WP主题的项目组合项目。

Wordpress的优点在于它可以做的非常高级的事情,只需更改仪表板中的设置即可。我建议你花一些时间研究每个功能可以做些什么,并且当你在12月份推出下一个版本时,你不需要对自己的代码进行故障排除,这将节省大量时间,并且会带来很多麻烦。

答案 1 :(得分:0)

在发表我对这个问题的评论之后,我发现可能我应该将与“portfolio / *”相匹配的任何内容重定向到portfolio.php,然后从那里我可以使用一些函数处理路径(现在已成功运行) )。

我所做的只是在我在问题中列出的规则后立即添加此行:

RewriteRule ^portfolio/([^/]+) /portfolio.php?$1 [NC]