.htaccess重定向除css和javascript之外的所有扩展名

时间:2013-03-04 13:07:52

标签: php html apache .htaccess web-applications

我有一个 .htaccess 文件,可以将任何扩展名重定向到非扩展程序网址,并显示 requestedfilename + .php 。它适用于(。*)部分条件。

当我输入 domain.com/file.html domain.com/file.xml 时,会显示 file.php 和网址看起来像 domain.com/file

我只想知道如何从表达式中删除像.js和.css这样的扩展名。我不想将它们重定向到任何其他php文件。

我尝试了类似:(。*!。(js | css))而不是(。*),但我找不到合适的解决方案..

目前的代码是:

<IfModule mod_rewrite.c>
RewriteEngine On
RewriteBase /

#
# to display the name.php file for any requested extension (.*)
#
RewriteRule ^(.*)\.(.*) $1\.php

#
# to hide all type of extensions (.*) of urls
#
RewriteCond %{THE_REQUEST} ^[A-Z]+\s.+\.(.*)\sHTTP/.+
RewriteRule ^(.+)\.php $1 [R=301,L]

#
# no extension url to php
#
RewriteCond %{REQUEST_FILENAME}.php -f
RewriteCond %{REQUEST_URI} !/$
RewriteRule (.*) $1\.php [L]

</IfModule>

2 个答案:

答案 0 :(得分:4)

如果您的Apache版本支持它,您可以使用“负向前瞻”并编写第一个RewriteRule,如下所示:

RewriteRule ^(.*)\.(?!js|css)([^.]*)$ $1\.php

[^.]部分确保(.*)\.匹配所有内容,直到最后.,“定位”在正确位置的负向前瞻。

答案 1 :(得分:0)

重定向的主要思想是转发某些东西,当它不存在时,如果请求的网址不存在,重定向将仅起作用。如果您有一个http://mysite.com/js/script.js文件,它将始终以正常文件打开该文件。

因此,在您的情况下,如果实际存在css和js文件,则不需要特定的重定向。

您可能需要做的是指向这些文件的完整路径。例如:

等...