1

我有以下 .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

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

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

4

2 回答 2

0

你想不想/myfolder/myfolder/改写成myfolder.php? 尝试在.htaccess隐藏文件中使用此代码:

Options +FollowSymlinks
RewriteEngine on

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

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

于 2013-04-03T11:36:36.797 回答
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
于 2013-04-03T10:55:48.490 回答