【问题标题】:.htaccess - how can I hide the .php from urls?.htaccess - 我如何隐藏 .php 从 url 中?
【发布时间】:2017-09-29 23:48:12
【问题描述】:

我正在寻找一种清理网站 url 的方法,例如当 url 中有文件名时删除 .php 或 .html。此外,如果可以轻松隐藏 GET 扩展名也不错,但 .php 是主要目标。

从其他文章和 SO 问题中,我在网站主目录的 .htaccess 文件中有此代码:

RewriteEngine On
RewriteCond %{HTTPS} off
RewriteRule ^(.*)$ https://%{HTTP_HOST}%{REQUEST_URI} [L,R=301]


RewriteCond %{REQUEST_FILENAME} !-d
RewriteCond %{REQUEST_FILENAME}\.php -f
RewriteRule ^(.*)$ $1.php

如果有人使用 http 键入 url,则第一部分重定向到 https。那部分工作正常。后 3 行应在文件上使用不带 .php 扩展名的 url。例如https://www.fixitconnect.com/users.php 应该是https://fixitconnect.com/users

我不知道这种语法是如何工作的,所以我只是复制其他答案。看起来它设置了一些条件(如果当前文件名中有 .php),然后在满足这些条件时应用规则(使用不带 .php 的 url)。但我可能做得不对。

谢谢:)

【问题讨论】:

    标签: php .htaccess url url-rewriting


    【解决方案1】:

    试试下面的代码:

    DirectorySlash Off 
    RewriteEngine on
    RewriteCond %{REQUEST_FILENAME}\.html -f
    RewriteRule ^(.*)  /$1.html [L] 
    RewriteCond %{REQUEST_FILENAME}\.php -f 
    RewriteRule ^(.*)  /$1.php [L]
    RewriteCond %{THE_REQUEST} \s/+(.*?/)?(?:index)?(.*?)\.(html|php)[\s?/] [NC] 
    RewriteRule ^(.*)  /%1%2 [R=302,L]
    RewriteCond %{REQUEST_URI} !(/$|\.) [NC]
    RewriteRule ^  %{REQUEST_URI}/ [R=302,L] 
    

    上面的代码将删除两个html & php 扩展名,然后优先检查没有扩展名的文件名,然后是文件夹。

    因此,如果您有同名的文件和文件夹,则优先考虑没有扩展名的文件。

    注意:如果您有两个具有相同名称和不同扩展名的文件,则优先级将是.html,如果您想成为.php,则将第五行和第六行放在第三行和第四行。

    目录的最后一行不带斜线时再次斜线。

    如果没问题,把302改成301得到永久重定向。

    【讨论】:

    • 这似乎行得通,谢谢 :) 我主要关心 .php 页面,因为网站上 99% 的页面以 .php 结尾。因此,如果有一个文件具有另一个扩展名,如 .html,那么它只会显示 .html。很彻底很高兴
    【解决方案2】:

    下面的 htaccess 修改将允许您访问路径而无需在末尾有 .php

     <IfModule mod_rewrite.c>
    RewriteEngine On
    RewriteCond %{REQUEST_FILENAME} !-f
    RewriteRule ^([^\.]+)$ $1.php [NC,L]
    </IfModule>
    

    因此 URL https://www.fixitconnect.com/users.php 可以通过以下方式访问 https://www.fixitconnect.com/users。虽然https://www.fixitconnect.com/users.php这个url只要实际存在还是可以直接访问的

    使用以下代码,您可以将所有请求重写为 index.php 基本上 index.php 是处理所有 url 请求的 php 文件。

    RewriteEngine on
    
    
    RewriteCond %{REQUEST_URI} !^/index.php$
    RewriteRule ^(.+)$ /index.php?url=$1 [NC,L]
    

    也可以查看link

    【讨论】:

    • 有效:D,但即使链接指向fixitconnect.com/users.php,我也可以让它重定向到fixitconnect.com/users吗?
    • 如果有一个名为user的文件夹,但实际上想转到user是像/user这样的php页面,它会指向该页面还是打开该文件夹?
    • 好点子,甚至不知道你可以在不指定文件的情况下直接转到文件夹,例如 /user/jake.php
    猜你喜欢
    • 2015-04-09
    • 2015-10-06
    • 2013-09-13
    • 2012-04-19
    • 1970-01-01
    • 2020-01-13
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多