【问题标题】:Removing file extensions & redirecting to index page删除文件扩展名并重定向到索引页面
【发布时间】:2018-10-23 18:35:15
【问题描述】:

所以我试图让我的网站删除所有文件扩展名,而不是 https://multimap.xyz/error/id.php?=... 它将只是 https://multimap.xyz/error/id?=... 。同样,我应该能够做到 https://multimap.xyz/mail/index.php 并且它会删除尾随 index.php 以产生 https://multimap.xyz/mail/

我正在尝试使用 .php 和 .html 文件扩展名和索引以及使用 .htaccess 来实现这一点,这就是我目前所拥有的

php_flag display_errors off
ErrorDocument 404 https://multimap.xyz/error/id?=404
Options +MultiViews
RewriteEngine On
RewriteCond %{REQUEST_FILENAME} !-d
RewriteCond %{REQUEST_FILENAME} !-f
RewriteRule ^([^\.]+)$ $1.php [NC,L]
RewriteRule ^([^\.]+)$ $1.html [NC,L]

这适用于删除文件扩展名。所以 .../error/id?=... 完美运行。但是,当尝试访问 https://multimap.xyz/mail/ 时,它会显示一个错误页面,提示

在此服务器上找不到请求的 URL /email/.php。

感谢任何帮助/建议。

谢谢你:)

【问题讨论】:

  • 我不确定这需要标签php
  • 您的意思是说multimap.xyz/mail 显示在此服务器上未找到请求的 URL /mail/.php。 ?
  • 您可以添加 RewriteCond %{REQUEST_FILENAME}.php -f 以仅将其重写为例如存在的文件。或者做一些更易于维护的事情:只需使用引导文件作为FallbackResource,并使用您选择的语言中的逻辑。
  • 请注意,2 RewriteConds 不适用于第二个 RewriteRule,如果您希望它们适用,请再次添加。
  • 是的,转到 url /email/ 会显示发布的错误,因为它看起来像是在尝试查找 /email/.php 而不是 /email/index.php

标签: php html .htaccess


【解决方案1】:

您应该在重写之前检查.html.php 文件是否存在。

RewriteEngine On

RewriteCond %{THE_REQUEST} \s/+(.*?/)?(?:index|(\S+?))\.(?:php|html)[/\s?] [NC]
RewriteRule ^ /%1%2 [R=301,L,NE]

RewriteCond %{REQUEST_FILENAME} !-d
RewriteCond %{REQUEST_FILENAME}.php -f
RewriteRule ^(.+?)/?$ $1.php [L]

RewriteCond %{REQUEST_FILENAME} !-d
RewriteCond %{REQUEST_FILENAME}.html -f
RewriteRule ^(.+?)/?$ $1.html [L]

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-08-15
    • 2015-01-25
    • 2017-04-30
    • 1970-01-01
    • 2014-12-17
    • 2017-05-30
    相关资源
    最近更新 更多