【问题标题】:hide extension .php in url mod_rewrite在 url mod_rewrite 中隐藏扩展名 .php
【发布时间】: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

【问题讨论】:

标签: php url mod-rewrite


【解决方案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
    猜你喜欢
    • 1970-01-01
    • 2018-03-14
    • 2021-01-23
    • 1970-01-01
    • 1970-01-01
    • 2012-04-19
    • 1970-01-01
    • 2010-12-31
    • 1970-01-01
    相关资源
    最近更新 更多