重写没有文件扩展名的URL(包括跨子目录)

时间:2014-07-08 14:38:29

标签: php apache .htaccess mod-rewrite

我的服务器上有以下.htaccess文件(这是我在线找到的代码的调整,对于我的生活,我记不起来了)我不太确定如何修改它:

RewriteEngine On
RewriteCond %{REQUEST_FILENAME} !-f
RewriteRule ^([^/]+)/$ $1.php
RewriteRule ^([^/]+)/([^/]+)/$ /$1/$2.php
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteCond %{REQUEST_URI} !(\.[a-zA-Z0-9]{1,5}|/)$
RewriteRule (.*)$ /$1/ [R=301,L]

它基本上抓取了网址,删除了任何尾随/,将.php添加到其末尾,转到该页面,但随后显示带有/的链接,而不是URL栏中的扩展名(我可以告诉他们)。

它的效果非常好,禁止两个恼人的小问题:

  • 然后我只能在该目录中拥有.php个文件。任何其他人休息。
  • 需要将.htaccess文件复制到EVERY子目录才能运行。

可以对此脚本进行改进,以执行以下操作:

  • 将它放在我的根(/)目录中并让它适用于所有子文件夹?
  • 在每个目录中允许多个文件扩展名? (例如一些.php,一些.html

1 个答案:

答案 0 :(得分:0)

此代码应该来自您的DocumentRoot,并会添加所有扩展程序:

Options +MultiViews

RewriteEngine On
RewriteCond %{REQUEST_URI} !(\.[a-zA-Z0-9]{1,5}|/)$
RewriteRule ^(.+)$ /$1/ [R=301,L]