.htaccess 重定向除 css 和 javascript 之外的所有扩展
Posted
技术标签:
【中文标题】.htaccess 重定向除 css 和 javascript 之外的所有扩展【英文标题】:.htaccess redirect all extension except css and javascript 【发布时间】:2013-02-18 14:03:39 【问题描述】:我有一个 .htaccess 文件,它将任何扩展名重定向到非扩展名 url 并显示 requestedfilename + .php。它适用于条件的 (.*) 部分。
当我输入 domain.com/file.html 或 domain.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>
【问题讨论】:
【参考方案1】:如果您的 Apache 版本支持它,您可以使用“负前瞻”并像这样编写第一个 RewriteRule:
RewriteRule ^(.*)\.(?!js|css)([^.]*)$ $1\.php
[^.]
part 确保 (.*)\.
匹配直到最后一个 .
之前的所有内容,将负前瞻“定位”在正确的位置。
【讨论】:
正是我想要的!谢谢!【参考方案2】:重定向的主要思想是转发一些不存在的东西,所以重定向只有在请求的 url 不存在时才会起作用。如果您有一个http://mysite.com/js/script.js
文件,它将始终像正常文件一样打开该文件。
因此,在您的情况下,如果 css 和 js 文件确实存在,则不需要特定的重定向。
您可能需要做的是指出这些文件的完整路径。例如:
http://mysite.com/js/script.js(工作) /js/script.js(有效) js/script.js(如果您在不同的重定向目录下,则将失败)等等……
【讨论】:
好吧,如果你愿意,你当然可以强制重定向,即使文件或目录存在。这就是-d
和 -f
的用途。
是的,我只是在评论“它总是会像普通文件一样打开该文件”,但事实并非如此。以上是关于.htaccess 重定向除 css 和 javascript 之外的所有扩展的主要内容,如果未能解决你的问题,请参考以下文章
通过 httpd.conf / htaccess 重定向目录中除一个文件之外的所有文件
配置 htaccess 以直接访问 CSS 和 JS 文件,但将所有其他请求重定向到索引文件 [重复]