如何从url中删除.php扩展名,以获取与文件夹相同的文件

时间:2016-01-02 18:27:06

标签: php .htaccess

我使用了这段代码

## 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排名不会出现在网址中。

所以我想知道是否有可能将.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

那么,我可以做些什么来隐藏此页面的扩展名吗?或者我是否需要更改文件的名称 - 不是某些文件夹?

2 个答案:

答案 0 :(得分:0)

试试这个

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

答案 1 :(得分:0)

其中一个"问题"是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)。例如。 example.com/science/。然而,这可能是不必要的(并且可能最好避免以避免用户混淆),因为我假设example.com/science(没有尾随斜杠,即science.php)返回你的"科学" 类别内容。如果没有DirectoryIndex文档,example.com/science/将只返回403 Forbidden。或者,您可以使用外部重定向从这些URL中显式删除尾部斜杠。