2013-03-04 76 views
3

我有一個的.htaccess文件重定向任何擴展到非擴展的網址,並顯示requestedfilename + .PHP。它與(。*)條件的一部分效果很好。的.htaccess重定向所有的擴展除了CSS和JavaScript

當我鍵入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> 

回答

2

如果你的Apache的版本支持它,你可以使用「排除模式」,並寫了第一重寫規則是這樣的:

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

[^.]部分可以確保(.*)\.匹配的一切,直到最後.,「定位」在正確的點消極前瞻。

+0

正是我期待的!謝謝! – jameson 2013-03-04 14:01:38

0

重定向的主要思想,是轉發的東西,當它不存在,那麼重定向只會工作,如果請求的網址不存在。如果你有一個http://mysite.com/js/script.js文件,它會一直打開該文件。

所以在你的情況下,你不需要一個特定的重定向的CSS和JS文件,如果他們真的在那裏。

你可能需要做的是指向全部這些文件的路徑。在例如:

  • http://mysite.com/js/script.js(作品)
  • /js/script.js(作品)
  • JS /的script.js(如果你是一個不同的重定向目錄下,然後根會失敗)

等等

+0

好吧,如果你願意,你當然可以強制重定向,即使文件或目錄存在。這就是'-d'和'-f'的意思。 – 2013-03-04 13:27:09

+0

但是在這種情況下,這樣做沒有意義。 – Peon 2013-03-04 13:54:01

+0

是的,我只是在評論「它會一直打開那個文件」,但事實並非如此。 – 2013-03-04 19:20:52

相關問題