【问题标题】:How to remove .php extension the pro way如何以专业的方式删除 .php 扩展名
【发布时间】:2016-07-13 01:14:40
【问题描述】:

我已经创建了我的第一个 PHP 解决方案,但无法从 URL 中删除 .php 扩展名。它在根目录中有效,但在子文件夹中无效?

例如,www.domain.com/index.phpwww.domain.com/index(或www.domain.com/)到达

然后就变得棘手了。

例如。 www.domain.com/en/europe/bikes/racer-bike.php 不会与 www.domain.com/en/bikes/racer-bike 不同,而不会以 www.domain.com/en/bikes/ and on index.php 结尾

我的 .htaccess 文件如下所示:

Options -MultiViews
RewriteEngine on
RewriteBase /

# Remove .php-extension from url
RewriteCond %{REQUEST_URI} ^/(.*).php$
RewriteRule ^(.*)$ %1 [L,QSA]

# Add trailing slash to url
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_URI} !(\.[a-zA-Z0-9]{1,5}|/|#(.*))$
RewriteRule ^(.*)$ $1/ [R=301,L]

# SSL
RewriteCond %{HTTP_HOST} ^domain.com$
RewriteRule ^(.*)$ http://www.domain.com$1 [R=301]
RewriteCond %{HTTP:X-Forwarded-Proto} !https
RewriteRule ^/?(.*)$ https://%{SERVER_NAME}/$1 [L,R=301,QSA]

【问题讨论】:

    标签: php .htaccess url php-extension


    【解决方案1】:

    我试了一下,效果很好:

    我的目录结构

    /
    index.php
    /sub
        file.php
    

    我的 htaccess 是这样的:

    RewriteEngine On
    RewriteBase /
    
    RewriteCond %{REQUEST_FILENAME} !-f
    RewriteCond %{REQUEST_FILENAME} !-d
    RewriteCond %{REQUEST_URI} ^/([^\/]*)$
    RewriteRule ^([^\/]*)$ $1.php [L]
    
    RewriteCond %{REQUEST_FILENAME} !-f
    RewriteCond %{REQUEST_FILENAME} !-d
    RewriteCond %{REQUEST_URI} ([A-Za-z]+)/(.*)$ [NC]
    RewriteCond %{DOCUMENT_ROOT}/%1 -d
    RewriteRule ^([A-Za-z]+)/(.*)$ $1/$2.php [NC,L,QSA]
    

    试试看

    【讨论】:

      【解决方案2】:

      你做错了......大多数情况下,你不会为每个 uri(路由)制作 php 文件。您不应该删除 php 扩展,您应该将所有 uri 指向 index.php 并使用一些路由器来定义如何处理每个请求。或者你可以使用一些框架来做到这一点,比如 laravel 或 symfony 等。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2019-07-06
        • 1970-01-01
        • 1970-01-01
        • 2020-08-11
        相关资源
        最近更新 更多