Перенаправление Htaccess на домашний как / но сохранить .index.asp в каталогах

#php #.htaccess

#php #.htaccess

Вопрос:

Мне нужна помощь с файлом htaccess:

 Options -Indexes
Options  FollowSymLinks
DirectoryIndex index.html index.htm index.asp index.php
ErrorDocument 401 http://www.domainname.com
ErrorDocument 403 http://www.domainname.com
ErrorDocument 404 http://www.domainname.com
ErrorDocument 500 http://www.domainname.com
ErrorDocument 507 http://www.domainname.com
RewriteEngine On
RewriteCond %{HTTP_HOST} ^www.domainname.com$
RewriteRule ^(.*) http://domainname.com/$1 [QSA,L,R]
RewriteRule ^(.*/)?index.([a-zA-Z0-9]{3,4})$ /$1 [R=301,L]
RewriteRule ^(.*).htm$ $1.php [NC]
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule ^(.*)$ index1.php?/$1 [L]
AddType text/html .html .htm .asp
AddType text/css .css
AddType image/vnd.microsoft.icon .ico
AddType image/jpeg .jpg
ExpiresActive on
ExpiresByType image/png "access plus 1 month"
ExpiresByType image/gif "access plus 1 month"
ExpiresByType image/jpeg "access plus 1 month"
ExpiresByType text/css "access plus 1 month"
ExpiresByType image/vnd.microsoft.icon "access plus 3 months"
<IfModule mod_headers.c>
  <FilesMatch ".(js|css|xml|gz)$">
    Header append Vary Accept-Encoding
  </FilesMatch>
</IfModule>
# compress the files
AddOutputFilterByType DEFLATE text/html text/plain text/xml text/css text/javascript application/x-javascript
# removes some bugs
BrowserMatch ^Mozilla/4 gzip-only-text/html
BrowserMatch ^Mozilla/4.0[678] no-gzip
BrowserMatch bMSIE !no-gzip !gzip-only-text/html
Header append Vary User-Agent
  

У меня есть эта строка в моем файле htaccess RewriteRule ^(.*/)?index.([a-zA-Z0-9]{3,4})$ /$1 [R=301,L] на данный момент она перенаправляет любое посещение, которое я получаю в индексном файле, в корень этого файла, так что попадание на

http://www.domainname.com/index.asp станет http://www.domainname.com / это именно то, что я хочу. Однако, если домен попадает во вложенную папку с индексным файлом, он будет отображать только каталог, а не название страницы:http://www.domainname.com/folder1/folder2/index.asp станет http://www.domainname.com/folder1/folder2 / это не то, чего я хочу.

Как мне это исправить, чтобы RewriteRule ^(.*/)?index.([a-zA-Z0-9]{3,4})$ /$1 [R=301,L] перенаправлять в root только в том случае, если он нажат на http://www.domainname.com/index.asp и не во всех каталогах.

Спасибо!

Комментарии:

1. Просто в качестве примечания, нет ничего более раздражающего, чем фактическое перенаправление в случае ошибки 404. Если вы вводите URL вручную, а после опечатки он автоматически перенаправляет вас, это очень раздражает, поскольку вы не можете просто исправить введенный вами URL.

2. Мне любопытно, что у меня есть как ErrorDocument 404, так и этот RewriteCond%{REQUEST_FILENAME} ! -f перезаписать второй%{REQUEST_FILENAME} ! -d RewriteRule ^(.*)$ index1.php ?/$1 [L] Я думаю, что перезапись будет иметь приоритет.

3. Ошибка document — на данный момент фактически не работает. Если страница не существует, она все равно переходит на страницу. Поэтому я мог бы прокомментировать это позже или полностью удалить.

4. Это фактически подводит меня к следующей проблеме, с которой я столкнулся. Если пользователь вводит в домене такой domainname.com/test это приведет к созданию страницы. (даже если страница не существует), а не перенаправляет его на документ с ошибкой.

5. Это из-за трех строк, о которых я опубликовал. !-f означает не файл, !-d означает не каталог. Итак, что происходит, Apache проверяет, существует ли запрошенный файл на самом деле, и если это не так, он перенаправляет вас на index1.php страница с именем запроса, вставленным в конце. Это не генерирует код 404. Если вы хотите обычную обработку 404, вам нужно удалить эти три строки.

Ответ №1:

Первая часть вашего регулярного выражения правила перезаписи соответствует чему-либо вплоть до / (или нет). Мы можем удалить эту часть и просто заставить ее вступить в силу в корневом каталоге.

 RewriteRule ^index.([a-zA-Z0-9]{3,4})$ / [R=301,L]