如何使.htaccess在当前目录而不是子目录上工作?

时间:2009-07-29 13:38:31

标签: .htaccess mod-rewrite

我正在使用mod重写间接访问我网站根目录下的PHP文件。目前,我有类似的东西,

RewriteRule ^(blog|about|page3|etc)$ /$1.php [L]

但我想用的是

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

因此,每当我想在我的网站上添加新页面时,我都不必更新我的.htaccess文件。但问题是,它也会影响我的子目录。这使得CSS,javascript,图像无法访问,因为它重定向到“/dir/example.png.php”。

那么这里最好的解决方案是什么?

4 个答案:

答案 0 :(得分:3)

尝试此规则:

RewriteCond %{DOCUMENT_ROOT}%{REQUEST_URI}.php -f
RewriteRule .* $0.php [L]

答案 1 :(得分:2)

.htaccess编辑为:

RewriteEngine On
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule ^(.*)$ /$1.php [L]

启动重写引擎后,它将首先检查所请求的文件是否是系统上的实际文件,或者它是否实际上是一个目录。如果它不是那些,它将执行规则,在这种情况下,尝试通过附加.php并提供该文件来查找文件。

子目录,图像,CSS等都可以,因为一旦找到它们,它们就会退出重写。

答案 2 :(得分:1)

我会使用过滤器来忽略子目录。这样,如果添加子文件夹,则只需更改它。如果文件夹中有图像或其他文件,则需要添加 Sosh 的行

以下将忽略“images”和“js”子文件夹并重定向其他所有内容

RewriteRule   ^images*   -  [L]
RewriteRule   ^js*       -  [L]
RewriteRule   ^(.*)$     /$1.php   [L]

答案 3 :(得分:-1)

像这样的东西(注意!):

RewriteRule !\.(js|ico|gif|jpg|png|css|zip|gz|html|xml)$ index.php