我想要这个示例网址:
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]
答案 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。