#php #apache #.htaccess #redirect #mod-rewrite
#php #апач #.htaccess .htaccess #перенаправление #модификация-перезапись
Вопрос:
Мой сайт структурирован следующим образом:
include
include/interface/
include/templates/
include/subdomains/
include/subdomains/forum ...
Я хочу перенаправить пользователя на ошибку 404 при просмотре fodler include и всех подкаталогов за пределами этого. Это работает очень хорошо, и поддомены будут просматриваться через официальный forums.example.org но не через example.org/include/subdomains/forum/
Для достижения этого я использую правило:
Redirect 404 /include/
Однако, когда я захожу на форум и использую переписанные URL-адреса с форума, они выдают ошибку 404 из-за того, как структурирован форум. Форум структурирован следующим образом:
include/rewrite.php
Он пытается запросить этот файл, но из-за (я предполагаю, что родительский файл .htaccess взаимодействует с файлом forums htaccess), он не работает, и я получаю ошибку «Запрошенный URL .. не может быть найден на этом сервере».
Мой вопрос в том, как я могу сохранить родительский файл htaccess, перенаправляющий папку include сайта на ошибку, но не на ошибку для форума?
Мой код выглядит следующим образом:
родительский htaccess:
RewriteEngine on
# Do not remove this line, otherwise mod_rewrite rules will stop working
RewriteBase /
ErrorDocument 400 /errors/400
ErrorDocument 401 /errors/401
ErrorDocument 403 /errors/403
ErrorDocument 404 /errors/404
ErrorDocument 500 /errors/500
ErrorDocument 501 /errors/501
ErrorDocument 502 /errors/502
ErrorDocument 503 /errors/503
ErrorDocument 504 /errors/504
ErrorDocument 505 /errors/505
ErrorDocument 506 /errors/506
ErrorDocument 507 /errors/507
ErrorDocument 508 /errors/508
ErrorDocument 509 /errors/509
ErrorDocument 510 /errors/510
AddDefaultCharset UTF-8
<IfModule mod_headers.c>
<FilesMatch ".(js|css|xml|gz)$">
Header append Vary: Accept-Encoding
</FilesMatch>
</IfModule>
Redirect 404 include/
Форум htaccess:
# MultiViews INTERFERS WITH PROPER REWRITING.
Options -MultiViews
RewriteEngine On
# UNCOMMENT AND PROPERLY SET THE RewriteBase IF THE REWRITE RULES ARE NOT WORKING PROPERLY.
RewriteBase /
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule . include/rewrite.php [L]
# ----------------------------------------------------------------------
# DISABLE DIRECTORY BROWSING.
# ----------------------------------------------------------------------
<IfModule mod_autoindex.c>
Options -Indexes
</IfModule>
# ----------------------------------------------------------------------
# UTF-8 ENCODING.
# ----------------------------------------------------------------------
# USE UTF-8 ENCODING FOR ANYTHING SERVED text/plain OR text/html.
AddDefaultCharset utf-8
# FORCE UTF-8 FOR A NUMBER OF FILE FORMATS.
AddCharset utf-8 .html .css .js .xml .json .rss
# ----------------------------------------------------------------------
# BETTER WEBSITE EXPERIENCE FOR INTERNET EXPLORER USERS.
# ----------------------------------------------------------------------
<IfModule mod_setenvif.c>
<IfModule mod_headers.c>
BrowserMatch MSIE ie
Header set X-UA-Compatible "IE=Edge,chrome=1" env=ie
</IfModule>
</IfModule>
<IfModule mod_headers.c>
# BECAUSE X-UA-Compatible ISN'T SENT TO NON-IE (TO SAVE HEADER BYTES), WE NEED TO INFORM PROXIES THAT CONTENT CHANGES BASED ON UA.
Header append Vary User-Agent
# CACHE CONTROL IS SET ONLY IF mod_headers IS ENABLED, SO THAT'S UNNECESSARY TO DECLARE.
</IfModule>