【问题标题】:Page-alias without .html-suffix没有 .html 后缀的页面别名
【发布时间】:2013-12-06 02:33:27
【问题描述】:

我在这里安装的一个 TYPO3 使用页面设置中的字段alias它不使用simulatestaticrealurl。如果页面的别名是foo,则可以通过以下 URL 访问该页面:

  • /index.php?id=foo
  • /foo.html

我现在希望可以通过另一个 URL 访问该页面:/foo,而不是 .html

我的方法是简单地使用 mod_rewrite 添加一些这样的规则:

RewriteCond %{REQUEST_FILENAME} !index.php$
RewriteCond %{REQUEST_FILENAME} !\.html$
RewriteRule ^([^/]+)$ $1.html [QSA]

我的 RewriteRules 有效,它们首先将 URI /foo 重写为 /foo.html,然后再重写为 /index.php。这不起作用,我在请求 /foo 时得到 404。

我认为这是因为 TYPO3 仍然得到原始 URI 是 /foo 而不是 /foo.html 的信息,它无法识别。

如果不使用 realurl 或simulatestatic(副作用是不需要的),也不使用HTTP 重定向(浏览器中的URL 应该是/foo),如何解决这个问题? apache 中有没有类似服务器内部重定向的东西?

【问题讨论】:

  • 你确定没有开启模拟静态?我以前不知道“别名”,但jochenfroehlich.com/typo3-glossar/alias.html 告诉我所描述的行为是通过模拟静态实现的。如果没有,也许它是您可以扩展的自定义扩展?
  • 不,模拟静态已关闭,我很确定。例如,如果它打开,菜单将生成以.html 结尾的 URL(页面类型和 id 编码到文件名中),但生成的 URL 看起来像 index.php?id=alias。这个问题已经得到解决(但没有解决),方法是使用 mod_rewrite 将.html 附加到不带斜线点(= 无文件扩展名)的 URI,然后通过 HTTP 重定向客户端。
  • 哪些“副作用”是不需要的?有负面的吗?
  • 是的,但它们属于“商业”类别。无法详细说明,抱歉。如果这些不存在,realurl 早就安装好了

标签: apache mod-rewrite typo3


【解决方案1】:

如果您的服务器上激活了mod_proxy,您可以使用proxy flag [P] 并编写:

RewriteCond %{REQUEST_FILENAME} !\.html$
RewriteRule ^([^/]+)$ /$1.html [QSA,P]

如果没有,您可以编写一个充当代理的 php 文件(我之前为 Typo3 做过)。在这种情况下,cURL 或者简单的 file_get_contents() 也非常方便。确保仅从您的域加载页面。将您的非 .html 文件重定向到代理文件,该代理文件将它们重定向到 .html 文件,然后由 Typo3 处理。

【讨论】:

    猜你喜欢
    • 2020-01-26
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-07-16
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多