Правило htaccess для перенаправления всех не-каталогов и не файловых запросов

0

У меня есть сайт, для которого мне нужно, чтобы все файлы, не относящиеся к каталогам и не файлам, перенаправлялись обратно в HTTP_HOST. У меня есть правило повторной записи, чтобы обслуживать только файлы с расширением PHP без ограничений и всегда разрешать доступ к www.HTTP_HOST из запросов голого домена. Вот мой htaccess файл:

#Main Page
DirectoryIndex index.php
AddDefaultCharset UTF-8
Options +FollowSymLinks
RewriteEngine On
RewriteBase /

# Cache Control for Images and Assets
<FilesMatch "\.(ico|pdf|flv|jpg|jpeg|png|gif|js|css|swf)$">
Header set Cache-Control "max-age=604800, public"
</FilesMatch>

# Never Use the naked domain
RewriteCond %{HTTP_HOST} ^example\.com$ [NC]
RewriteRule ^(.*)$ http://www.%{HTTP_HOST}/$1 [L,R=301,NE]

# Never Use the naked domain and Remove PHP extension
RewriteCond %{THE_REQUEST} \.(php|cfm)[\s?] [NC]
RewriteCond %{DOCUMENT_ROOT}/$1\.php -f
RewriteRule ^(.+?)\.(cfm|php)$ /$1 [R=301,L,NE]

# Re-direct Non-file Non-directories to HTTP_HOST
RewriteCond %{REQUEST_FILENAME} !-d
RewriteCond %{REQUEST_FILENAME} !-f
RewriteRule ^(.+?)((\?.*)|())$ http://www.example.com [R=301,L]

# unless directory, remove trailing slash
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule ^(.*)/$ /$1 [R=301,L]

# Resolve .php file for extensionless php urls
RewriteCond %{REQUEST_FILENAME} !-d
RewriteCond %{DOCUMENT_ROOT}/$1\.php -f
RewriteRule ^(.+?)/?$ $1.php [L] 

Мой 4-й набор правил, похоже, не работает так, как мне это нужно, не знаю почему. Спасибо за любую помощь заранее.

  • 0
    Это # Re-direct Non-file... не работает?
  • 0
    Кажется, сейчас работает. Не уверен, была ли кэширована более старая версия файла htaccess или в чем проблема.
Теги:
.htaccess
mod-rewrite

1 ответ

0

Вместо фильтрации mod_rewrite запроса с использованием mod_rewrite, рассмотрите возможность использования FallbackResource:

http://httpd.apache.org/docs/trunk/mod/mod_dir.html#fallbackresource

Это проще в обслуживании и должно быть проще для Apache.

  • 0
    Это решение отлично подходит для разрешения определенного существующего файла и не возвращает 404. Однако запрошенный URL-адрес все еще добавляется к хосту, что не очень хорошо для SEO. Переписать еще нужно.

Ещё вопросы

Сообщество Overcoder
Наверх
Меню