我有一个静态HTML网站。我现在使用一些PHP,所以我的页面有.php结尾。例如www.example.com/about.php
我如何重定向或“隐藏”.php结尾,使上面的例子变成www.example.com/about?
我有一个.htaccess文件为我的旧网站。代码如下。但我不知道如何编辑它,使它适用于我的新.php页。
RewriteEngine On
# add www and turn on https in same rule
RewriteCond %{HTTP_HOST} !^www\. [NC,OR]
RewriteCond %{HTTPS} !on
RewriteCond %{HTTP_HOST} ^(?:www\.)?(.+)$ [NC]
RewriteRule ^ https://www.%1%{REQUEST_URI} [R=301,L,NE]
## hide .html extension
# To externally redirect /file.html to /file
RewriteCond %{THE_REQUEST} \s/+(.+?)\.html[\s?] [NC]
RewriteRule ^ /%1 [R=301,NE,L]
# To internally rewrite /file to /file.html
RewriteCond %{REQUEST_FILENAME} !-d
RewriteCond %{REQUEST_FILENAME}.html -f
RewriteRule ^(.+?)/?$ $1.html [L]
关于添加www和打开https的第一点,我想保留。
关于隐藏.html扩展名的第二点需要更改。
最后一点我认为我不需要并且可以删除。我不认为我需要重写任何从/file到/file. php的内部链接
多谢
2条答案
按热度按时间ct3nt3jp1#
您可以在当前的
.htaccess
中使用与html相同的命令。只需将html
替换为php
即可。因此,
会变成
在你的
.htaccess
中。显然,这将禁用
.html
文件的“功能性”。gmxoilav2#
这听起来像是当有人访问**www.example.com/about.php时,你的服务器上有一个名为
about.php
的根级别文件来处理它。如果有人访问另一个类似www.example.com/another-page.php**的页面,你会有一个名为another-page.php
的单独的php文件保存在根级别来处理 * 该 * 请求。如果这就是你要做的,那么我认为你可以在htaccess文件中添加一个条件语句,不仅重写.html,还重写.php,以删除结尾,如下所示:
但是如果你正在做我认为你在后端做的事情,你仍然需要最后一部分来进行内部文件Map。如果有人从外部请求**www.example.com/about.php,用一个301代码把他们打发走,告诉他们在www.example.com/about上重试.所以浏览器会很好地遵守你的指示,并返回第二个请求到www.example.com/about.但是,在后端,服务器需要知道如何处理/about**的请求。如果您希望名为
about.php
的文件处理它,则需要使用以下行告诉服务器:以下是您编辑的
.htaccess
文件,用于完成:大多数php框架将所有的流量发送到一个入口点,例如
/index.php
,并根据url计算路由。换句话说,框架告诉服务器,不要担心试图将请求路由到正确的文件,只要将它们都给我index.php
,我会从那里计算出来。当然,你需要有逻辑来确定url是否有效。如果是这样的话,就抓取正确的文件,并在找到后将其回显。例如,在这种情况下,如果有人带着对something.php的请求来到你的站点,你的后端框架会发送一个301代码说,“对不起,下次不使用php再试一次”。