如何以专业方式删除 .php 扩展名
How to remove .php extension the pro way
我已经创建了第一个 Php 解决方案,但无法从 URL 中删除 .php 扩展名。它在根文件夹中有效但在子文件夹中无效?
例如 www.domain.com/index.php
从 www.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 ^(.*)$ / [R=301,L]
# SSL
RewriteCond %{HTTP_HOST} ^domain.com$
RewriteRule ^(.*)$ http://www.domain.com [R=301]
RewriteCond %{HTTP:X-Forwarded-Proto} !https
RewriteRule ^/?(.*)$ https://%{SERVER_NAME}/ [L,R=301,QSA]
你做错了......大多数情况下你不会为每个 uri(路由)制作 php 文件。你不应该删除 php 扩展,你应该将所有 uri 指向 index.php 并使用一些路由器来定义如何处理每个请求。或者你可以只使用一些框架来做到这一点,比如 laravel 或 symfony 等
我试了一下,效果很好:
我的目录结构
/
index.php
/sub
file.php
我的 htaccess 是这样的:
RewriteEngine On
RewriteBase /
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteCond %{REQUEST_URI} ^/([^\/]*)$
RewriteRule ^([^\/]*)$ .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]+)/(.*)$ /.php [NC,L,QSA]
试一试
我已经创建了第一个 Php 解决方案,但无法从 URL 中删除 .php 扩展名。它在根文件夹中有效但在子文件夹中无效?
例如 www.domain.com/index.php
从 www.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 ^(.*)$ / [R=301,L]
# SSL
RewriteCond %{HTTP_HOST} ^domain.com$
RewriteRule ^(.*)$ http://www.domain.com [R=301]
RewriteCond %{HTTP:X-Forwarded-Proto} !https
RewriteRule ^/?(.*)$ https://%{SERVER_NAME}/ [L,R=301,QSA]
你做错了......大多数情况下你不会为每个 uri(路由)制作 php 文件。你不应该删除 php 扩展,你应该将所有 uri 指向 index.php 并使用一些路由器来定义如何处理每个请求。或者你可以只使用一些框架来做到这一点,比如 laravel 或 symfony 等
我试了一下,效果很好:
我的目录结构
/
index.php
/sub
file.php
我的 htaccess 是这样的:
RewriteEngine On
RewriteBase /
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteCond %{REQUEST_URI} ^/([^\/]*)$
RewriteRule ^([^\/]*)$ .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]+)/(.*)$ /.php [NC,L,QSA]
试一试