在 url mod_rewrite 中隐藏扩展名 .php

Posted

技术标签:

【中文标题】在 url mod_rewrite 中隐藏扩展名 .php【英文标题】:hide extension .php in url mod_rewrite 【发布时间】:2011-09-08 15:26:29 【问题描述】:

我有一个 php 网站,我正在尝试隐藏扩展。我通过谷歌找到了一些东西,但它们似乎都太复杂了,或者它们将index 重定向到index.php:就像如果你写name.com/contact 它转到name.com/contact.php。我不想这样,我只想:

    www.name.com/es/index.php       to be www.name.com/es/inicio
    www.name.com/es/empresa.php     to be www.name.com/es/empresa
    www.name.com/es/productos.php   to be www.name.com/es/productos
    www.name.com/es/clientes.php    to be www.name.com/es/clientes
    www.name.com/es/recetas.php     to be www.name.com/es/recetas
    www.name.com/es/contacto.php    to be www.name.com/es/contacto

    www.name.com/en/index.php       to be www.name.com/en/home
    www.name.com/en/company.php     to be www.name.com/en/company
    www.name.com/en/products.php    to be www.name.com/en/products
    www.name.com/en/clients.php     to be www.name.com/en/clients
    www.name.com/en/recepis.php     to be www.name.com/en/recepis
    www.name.com/en/contact.php     to be www.name.com/en/contact

/en/ 文件夹是英文版,/es/ 文件夹是西班牙文版

网站内的链接也没有扩展名。

例如,链接到clientes 的图像将是clientes 而不是 clientes.php 如果有人试图转到/page.php,它仍然有效但它会重定向到/page

【问题讨论】:

这似乎与 ***.com/questions/183921/… 重复 Redirect *.php to clean URL的可能重复 【参考方案1】:
RewriteEngine on

Rewritecond %REQUEST_URI !-f Rewritecond %REQUEST_URI !-d Rewritecond %REQUEST_URI !-l RewriteRule ^([\w\d-]+)$ $1.php [L]

RewriteRule ^([^/.]+)$ $1.php [L]

【讨论】:

请尝试描述您的解决方案。【参考方案2】:

请在根目录中创建一个 .htaccess 文件并使用此代码!!

Options +FollowSymlinks

RewriteEngine On

RewriteBase /

RewriteCond %REQUEST_FILENAME !-f

RewriteCond %REQUEST_FILENAME !-d

RewriteCond %REQUEST_FILENAME.php -f

RewriteRule ^(.+)$ /$1.php [L,QSA]

希望!!对某人有用!

【讨论】:

【参考方案3】:

htacces 文件应如下所示:

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

您在没有“php”的情况下重定向 url 中具有相同名称的任何 php 文件。 然后在您的 php 文件中,您可以检查 url 是否包含扩展名 (http://blabla.com/bla.php) 并将页面重定向到没有扩展名的相同页面。 所以,在每个 php 文件的开头你应该调用这个函数:

function redirectIfNeeded()
    $url = $_SERVER["REQUEST_URI"];
    if(preg_match("/\.php/$", $url))
        header("Location: ".preg_replace("/\.php/",$url));

【讨论】:

如何将/es/index.php 重写为/es/inicio 没关系,我要把index.php改成inicio.php,然后把name.com/es/重定向到name.com/es/inicio 为什么 preg_match 的正则表达式中有美元符号? $ 在正则表达式中记录输入的结尾。例如:/\.php/$ 匹配 index.php 但不匹配 index.php5(因为 php 不是输入的结尾)。更多信息:regular-expressions.info/anchors.html

以上是关于在 url mod_rewrite 中隐藏扩展名 .php的主要内容,如果未能解决你的问题,请参考以下文章

一些没有.php扩展名的页面Mod_rewrite

thinkphp框架url中隐藏index.php

Apache URL重写规则

ThinkPHP 利用.htaccess文件的 Rewrite 规则隐藏URL中的 index.php

apache 配置rewrite模块,URL中隐藏index.php

httpd.conf mod_rewrite HTTPS 并删除 PHP 扩展