.htaccess在目录中重写 - 隐藏PHP扩展和强制结尾斜杠

问题描述:

我试图从我的文件中隐藏.php扩展名,以及强制生成的URL上的尾部斜杠。.htaccess在目录中重写 - 隐藏PHP扩展和强制结尾斜杠

示例:对/about.php的请求将变为/ about /,并且/ about的请求将转到/ about /。

下面的重写代码完美地工作,当我在我的hostdomain根:

RewriteEngine On 
RewriteRule ^(.*)/$ /$1.php [L] 
RewriteCond %{REQUEST_FILENAME} !-f 
RewriteCond %{REQUEST_URI} !(.*)/$ 
RewriteRule ^(.*)$ http://edit.mydomain.org/$1/ [R=301,L] 

RewriteCond %{THE_REQUEST} ^[A-Z]{3,9}\ /(.*)\.php\ HTTP/ [NC] 
RewriteRule .+ http://edit.mydomain.org/%1 [R=301,QSA] 

不过,我需要我的文件移动到该主机名的目录。将目录名添加到规则中,并在目录中使用.htaccess根本不起作用,似乎会导致无尽的重定向。

我看了看周围的*和其他网站,并试图许多例子,结束了与许多不同的错误,最常见的是:

  • 一切都是无止境的重定向。
  • 除目录主页以外的所有内容都是500错误。
  • about.php重定向到/ about,但没有重定向到/ about /和/ about /显示500错误。
  • 一切正常,但当没有文件名访问时,(目录)index.php的主页进入无尽的重定向。
  • 事情重定向到edit.mydomain.org/home/username/public_html/mydomain.org/edit/pagename.php显然不存在。

感谢您的帮助!我真的需要将这些文件保存在一个目录中,但如果需要,.htaccess可以进入主机名root。

这个目录将edit.mydomain.org/dave/

另存为的.htaccess,并把它放在“戴夫”目录

RewriteEngine On 

RewriteCond %{REQUEST_FILENAME} !-f 
RewriteCond %{REQUEST_URI} !\..+$ 
RewriteCond %{REQUEST_URI} !/$ 
RewriteRule ^(.*)$ http://edit.mydomain.org/dave/$1/ [R=301,L] 

RewriteRule ^(.*)/$ $1.php [L] 
+0

非常感谢!这工作完美。 我也想知道如何在有人直接访问索引文件时隐藏index.php?现在,它只是重定向到/ index /并显示主页。 我添加了一个重定向行,我找到了index.php,但现在它给了我一个Apache“此文档已移动”页面,但链接仍然转到index.php。 – Brian 2011-04-03 06:11:13

+1

@Brian - 如果你不想让人们访问index.php,那么通过在'RewriteEnginx On'行:'DirectoryIndex whatever.php index.php'后添加.htaccess来改变目录索引。然后,当你将浏览器指向一个文件夹时,Apache将首先查找whatever.php文件,如果它存在,它将使用它,如果它不存在,它将查找index.php。所以你可以将你的索引文件改成任何.php任何人去index.php只会得到一个404文件找不到错误。 – Emmanuel 2011-04-03 07:33:01

+0

哦,顺便说一句,如果你真的不想让人知道你使用的是php,请确保你的php.ini中的expose_php设置被设置为Off。看到这个链接:http://goo.gl/JRIYp – Emmanuel 2011-04-03 07:37:46

这对我的作品

RewriteBase/
RewriteEngine on 
RewriteCond %{REQUEST_FILENAME} !-d 
RewriteCond %{REQUEST_FILENAME}\.html -f 
RewriteRule ^(.*)$ $1.html 
+0

真棒,以为我永远不会找到它。 :) – 2012-04-24 21:42:48