.htaccess 如何重定向或“隐藏”页面上的.php结尾

mwyxok5s  于 2022-11-16  发布在  PHP
关注(0)|答案(2)|浏览(135)

我有一个静态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的内部链接
多谢

ct3nt3jp

ct3nt3jp1#

您可以在当前的.htaccess中使用与html相同的命令。只需将html替换为php即可。
因此,

...
## 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]

会变成

...
## hide .php extension
# To externally redirect /file.php to /file
RewriteCond %{THE_REQUEST} \s/+(.+?)\.php[\s?] [NC]    # html --> php
RewriteRule ^ /%1 [R=301,NE,L]

# To internally rewrite /file to /file.php
RewriteCond %{REQUEST_FILENAME} !-d
RewriteCond %{REQUEST_FILENAME}.php -f                 # html --> php
RewriteRule ^(.+?)/?$ $1.php [L]                       # html --> php

在你的.htaccess中。
显然,这将禁用.html文件的“功能性”。

gmxoilav

gmxoilav2#

这听起来像是当有人访问**www.example.com/about.php时,你的服务器上有一个名为about.php的根级别文件来处理它。如果有人访问另一个类似www.example.com/another-page.php**的页面,你会有一个名为another-page.php的单独的php文件保存在根级别来处理 * 该 * 请求。
如果这就是你要做的,那么我认为你可以在htaccess文件中添加一个条件语句,不仅重写.html,还重写.php,以删除结尾,如下所示:

RewriteCond %{THE_REQUEST} \s/+(.+?)\.php [NC]

但是如果你正在做我认为你在后端做的事情,你仍然需要最后一部分来进行内部文件Map。如果有人从外部请求**www.example.com/about.php,用一个301代码把他们打发走,告诉他们在www.example.com/about上重试.所以浏览器会很好地遵守你的指示,并返回第二个请求到www.example.com/about.但是,在后端,服务器需要知道如何处理/about**的请求。如果您希望名为about.php的文件处理它,则需要使用以下行告诉服务器:

# To internally rewrite /about to /about.php
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule ^(.+?)/?$ $1.php[L]

以下是您编辑的.htaccess文件,用于完成:

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 and .php extension
# To externally redirect /file.html to /file
RewriteCond %{THE_REQUEST} \s/+(.+?)\.php [NC]
RewriteCond %{THE_REQUEST} \s/+(.+?)\.html[\s?] [NC]
RewriteRule ^ /%1 [R=301,NE,L]

# To internally rewrite /file to /file.html
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule ^(.+?)/?$ $1.html [L]

大多数php框架将所有的流量发送到一个入口点,例如/index.php,并根据url计算路由。换句话说,框架告诉服务器,不要担心试图将请求路由到正确的文件,只要将它们都给我index.php,我会从那里计算出来。当然,你需要有逻辑来确定url是否有效。如果是这样的话,就抓取正确的文件,并在找到后将其回显。例如,在这种情况下,如果有人带着对something.php的请求来到你的站点,你的后端框架会发送一个301代码说,“对不起,下次不使用php再试一次”。

相关问题