htaccess将站点/子文件夹重定向到site / subfolder.php

时间:2013-04-03 02:22:23

标签: .htaccess web

我有以下.htaccess文件

#~ Turn on rewrite engine
RewriteEngine on

#~ Re-write urls for PHP documents.
RewriteCond %{REQUEST_FILENAME}\.php -f
RewriteRule ^(.*)$ $1.php

#~ redirect site/subfolder to site/subfolder.php
RewriteCond %{REQUESTFILENAME} !-f
RewriteRule ^(.*)/$ $1.php

这会将网址从site.com/something.php更改为site.com/something 但最后一点没有按预期工作,我有一个文件夹site.com/myfolder/当用户访问“site.com/myfolder”时,我希望显示site.com/myfolder.php而不是实际的文件夹。这实际上现在发生了,但是它会将页面踩在子文件夹中而不是在根目录中,因此所有相对URL都被破坏了,任何人都可以想到解决方案吗?

我的最终解决方案: [编辑]在下面发布了完整的脚本。

2 个答案:

答案 0 :(得分:0)

使用DirectorySlash Off后出现的最后一个问题是该网站只能通过http://mysite.com/访问,而不是http://mysite.com

所以你需要通过简单的错误重定向来解决这个问题

所以完整的解决方案就是:

#~ Turn off displaying index for folders and give a error 403 instead.
Options -Indexes

#~ Set the error page to the top folder of your website ending with a slash, use a http adres to make it act like a re-direct.
ErrorDocument 403 http://mysite.com/

#~ Set default page for folders.
DirectoryIndex index.php

#~ Turn off directory slashes.
DirectorySlash Off

#~ Turn on rewrite engine
RewriteEngine on

#~ Re-write urls for PHP documents.
RewriteCond %{REQUEST_FILENAME}\.php -f
RewriteRule ^(.*)$ $1.php

答案 1 :(得分:0)

您是否希望将/myfolder而不是/myfolder/重写为myfolder.php?尝试在.htaccess隐藏文件中使用此代码:

Options +FollowSymlinks
RewriteEngine on

RewriteCond %{REQUEST_URI} ^/([a-z0-9-_]+)$
RewriteRule ^(.*) /%1.php

但是如果你想重定向它而不是要重写,那么只需在代码上的[R]之后添加(空格和a) .php标志。或者呢?