我有一个 .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>
答案 0 :(得分:4)
如果您的Apache版本支持它,您可以使用“负向前瞻”并编写第一个RewriteRule,如下所示:
RewriteRule ^(.*)\.(?!js|css)([^.]*)$ $1\.php
[^.]
部分确保(.*)\.
匹配所有内容,直到最后.
,“定位”在正确位置的负向前瞻。
答案 1 :(得分:0)
重定向的主要思想是转发某些东西,当它不存在时,如果请求的网址不存在,重定向将仅起作用。如果您有一个http://mysite.com/js/script.js
文件,它将始终以正常文件打开该文件。
因此,在您的情况下,如果实际存在css和js文件,则不需要特定的重定向。
您可能需要做的是指向这些文件的完整路径。例如:
等...