2013-03-04 3 views
3

У меня есть .htaccess файл, который перенаправлять любое расширение к без расширений URL и отображает requestedfilename + .php. Он отлично работает с участками условий (. *)..htaccess перенаправляет все расширения, кроме CSS и JavaScript

Когда я типа domain.com/file.html или domain.com/file.xml он отображает file.php и URL выглядит domain.com/file.

Я просто хотел бы знать, как вызывать расширения exculde, такие как .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 так:

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

[^.] часть удостоверяется (.*)\. не соответствует всем до последнего ., «позиционирование» отрицательный предпросмотр в нужном месте.

+0

Именно то, что я искал! Спасибо! – jameson

0

Основная идея редирект, чтобы переслать что-то, когда его нет, поэтому перенаправление будет работать только, если запрашиваемый URL нет. Если у вас есть файл http://mysite.com/js/script.js, он всегда откроет этот файл как обычный.

Так что в вашем случае вам не нужна конкретная переадресация для файлов css и js, если они на самом деле там.

Что вам может понадобиться, это указать полный путь . В примере:

  • http://mysite.com/js/script.js (работы)
  • /js/script.js (работы)
  • JS/script.js (потерпит неудачу, если вы находитесь в других перенаправлены директориях, то корень)

и т.д ...

+0

Ну, если вы хотите, вы можете, конечно, перенаправить перенаправление, даже если файл или каталог существует. Для этого нужны '-d' и' -f'. –

+0

Но в этом случае нет смысла делать это. – Peon

+0

Да, я просто комментировал «он всегда откроет этот файл как обычный», что не так. –

Смежные вопросы