.htaccess重定向除CSS和javascript以外的所有扩展名


.htaccess redirect all extension except css and javascript

我有一个。htaccess文件,将任何扩展名重定向到非扩展名url,并显示 requestdfilename + .php。它与(.*)部分的条件配合得很好。

当我输入domain.com/file.htmldomain.com/file.xml时,它显示file.php, url看起来像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>

如果你的Apache版本支持它,你可以使用"negative forward "并像这样编写第一个rewriterrule:

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

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

重定向的主要思想,是转发的东西,当它不存在,所以重定向将只工作,如果请求的url不存在。如果您有一个http://mysite.com/js/script.js文件,它将始终打开该文件作为一个正常的。

所以在你的情况下,你不需要一个特定的重定向为css和js文件,如果他们确实在那里。

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

  • http://mysite.com/js/script.js (works)
  • /js/script.js (works)
  • js/script.js(如果你在不同的重定向目录下,将失败)

等等…