如何从url中删除php扩展名,对于类似文件夹的同名文件


how to remove the .php extension from url, for a file named same like a folder

我使用了这个代码

## remove the php extention
RewriteEngine on 
RewriteCond %{REQUEST_FILENAME} !-d 
RewriteCond %{REQUEST_FILENAME}'.php -f 
RewriteRule ^(.*)$ $1.php

这适用于某些文件,例如example.com/contact,但当我有一个也是目录的.php文件时就不起作用了。例如,在根文件夹中:

science.php 
science - folder

文章分为类别,例如http://example.com/science/themost-blabla.php-这是有效的,.php灭绝没有出现在URL中。

所以我想知道是否有可能将.php扩展隐藏到science.php,因为当我键入example.com/science时。。。它将我重定向到科学文件夹的内容。。。。

/science目录索引:

  • afla-care-a-fost-primul-meci-televizat-de-fotbal-din-lume-1937-arsenal.php
  • cazinoul-din-constanta.php cele-7-minuni-ale-lumii.php
  • descoperire-colosala-a-epavei-navei-spaniole-san-jose-ce-avea-la-bord-o-avere-impresionanta.php
  • imagini/ mitologia-greaca.php poenaru.php
  • top-10-cele-mai-importante-inventii-romanesti-din-istorie.php
  • top-5-enigme-ale-lumii.php turnul-eiffel.php

那么,我可以做些什么来隐藏这个页面的扩展吗?或者我需要更改文件的名称,而不是作为文件夹?

试试这个

RewriteEngine On
RewriteCond %{REQUEST_FILENAME} !-f
RewriteRule ^([^'.]+)$ $1.php [NC,L]

其中一个"问题"是mod_dir在访问目录时会试图通过在URL末尾添加斜杠来"修复"URL。但是,这是可以禁用的。

# Prevent mod_dir from automatically appending slashes to directories
DirectorySlash Off
# Disable directory listings
# In cases where there is a directory with no similar .php file and no DirectoryIndex
Options -Indexes
# If a PHP file exists for the requested URL then rewrite to this
RewriteEngine On
RewriteCond %{REQUEST_FILENAME}'.php -f 
RewriteRule (.*) $1.php [L]

如果需要,可以通过在URL上显式附加斜线来访问裸目录(或者更确切地说,DirectoryIndex)。例如CCD_ 16。然而,这可能是不必要的(为了避免用户混淆,最好避免),因为我假设example.com/science(没有尾部斜杠,即science.php)返回您的"science"类别内容。如果没有DirectoryIndex文档,example.com/science/将简单地返回403 Forbidden。或者,您可以通过外部重定向从此类URL中显式删除尾部斜杠。