【问题标题】:Remove file extension AND allow "pseudo directories"?删除文件扩展名并允许“伪目录”?
【发布时间】:2012-10-20 00:56:31
【问题描述】:

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

作品集页面将使用 Javascript(History.JS 或 Crossroads/Hasher)来“推送”代表类别和专辑的 URL。例如,单击左侧的“婚礼”将生成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 错误,因为它不是有效的目录或文件。我一直在搜索,但似乎找不到任何相关的东西,除了如何删除扩展(我正在工作)。

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

【问题讨论】:

  • 我想我需要重定向任何与“portfolio/*”匹配的内容并将其发送到“portfolio.php”。我该怎么做?

标签: php apache .htaccess url mod-rewrite


【解决方案1】:

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

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

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

Wordpress 的伟大之处在于它可以做的非常先进的事情,只需更改仪表板中的设置即可。我建议您花一些时间研究每个功能可以做什么,并且您将节省大量时间,并且在 WP 于 12 月推出下一个版本时不必对自己的代码进行故障排除。

【讨论】:

  • 感谢您的回答。部分原因是因为我在这个项目中寻找的复杂性和效果会因为大量的黑客攻击或需要大量的插件而更难通过 Wordpress,主要是因为我需要一个很好的借口来学习 jQuery/ Javascript 和一些 PHP。
  • 很高兴至少尝试一下!我只是鼓励您花更多时间学习 Wordpress 继承功能。我想你会惊讶于你目前认为对 Wordpress 来说太复杂的功能。归根结底,Wordpress 是可用的最强大的 MVC/CMS 平台之一。
  • 我已经使用 Wordpress 两年多了,所以我绝对了解它的功能。我只是喜欢有时挑战自己,不时应该这样做。 :)
【解决方案2】:

在对问题发表评论后,我突然想到,也许我应该将任何匹配“portfolio/*”的内容重定向到portfolio.php,然后我可以使用一些函数处理路径(现在可以成功运行)。

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

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

【讨论】:

    猜你喜欢
    • 2015-09-14
    • 2021-12-28
    • 1970-01-01
    • 2014-07-11
    • 1970-01-01
    • 2017-11-13
    • 2018-04-02
    • 2021-02-04
    • 2023-01-23
    相关资源
    最近更新 更多