如果存在则执行文件夹的索引,如果不执行php文件

时间:2014-08-23 02:07:18

标签: .htaccess url-redirection

我想要这个示例网址:

example.com/folder/phpfile 

重定向到:

example.com/folder/phpfile.php

它完美无缺,但我也希望能够通过此URL执行任何文件夹的index.php文件

http://example.com/folder 

http://example.com/folder/

或者

example.com/folder/subfolder

但我不知道如何使用RewriteCond %{REQUEST_FILENAME},因为据我所知,这是了解所请求的文件名是文件还是文件夹的条件。但我无法使其发挥作用。

这是我目前的.htaccess

Options -Indexes

RewriteEngine On

RewriteCond %{REQUEST_FILENAME} !-d
RewriteCond %{REQUEST_FILENAME} !-f
RewriteRule ^([a-zA-Z0-9-_])$ $1.php [NC,L]

2 个答案:

答案 0 :(得分:1)

您可以在root .htaccess中使用此代码满足您的要求:

# by default load index.php from a path
DirectoryIndex index.php
# make sure trailing slash is present for directories
DirectorySlash On

RewriteEngine On

# load /dir/file.php if request is for /dir/file
RewriteCond %{REQUEST_FILENAME} !-d
RewriteCond %{DOCUMENT_ROOT}/$1\.php -f [NC]
RewriteRule ^(.+?)/?$ /$1.php [L]

答案 1 :(得分:-1)

我们还可以做一件事来进一步清理我们的URL,即在URL中隐藏入口脚本index.php。这要求我们配置Web服务器以及urlManager应用程序组件。

我们首先需要配置Web服务器,以便入口脚本仍然可以处理没有条目脚本的URL。对于Apache HTTP服务器,可以通过打开URL重写引擎并指定一些重写规则来完成此操作。我们可以使用以下内容创建文件/wwwroot/blog/.htaccess。请注意,相同的内容也可以放在/ wwwroot / blog的Directory元素中的Apache配置文件中。

上的RewriteEngine
# if a directory or a file exists, use it directly
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d

# otherwise forward it to index.php

RewriteRule . index.php

然后我们将urlManager组件的showScriptName属性配置为false。

现在,如果我们拨打$this->createUrl('post/read',array('id'=>100)),我们就会获得网址/post/100。更重要的是,我们的Web应用程序可以正确识别此URL。