2017-02-04 7 views
1

Давайте предположим, что у меня есть статический сайт на сервере Apache с этой папки структуры:.htaccess проверить, если файл существует в нескольких вложенных папок и переписать

http://www.example.com 
|  
+-- /news/ 
| | 
| +-- page1.html 
| +-- page2.html 
| +-- ... 
| 
+-- /otherstuff/ 

URL-адрес страниц внутри/Новости/папки является:

http://www.example.com/news/page1.html 
http://www.example.com/news/page2.html 

Теперь, количество файлов в/новости/папки растет, и я хотел бы создать новые подпапки внутри/новости/и разделять файлы через эти новые директорий, но я также хочу, чтобы скрыть имена подпапок в URL-адресах.

Новая структура папок будет:

http://www.example.com 
|  
+-- /news/ 
| | 
| +-- /subfolder1/ 
| | | 
| | +-- page1.html 
| | 
| +-- /subfolder2/ 
| | | 
| | +-- page2.html 
| +-- ... 
| 
+-- /otherstuff/ 

но URL-адреса этих страниц должны оставаться такой же:

http://www.example.com/news/page1.html 
http://www.example.com/news/page2.html 

и не:

http://www.example.com/news/subfolder1/page1.html 
http://www.example.com/news/subfolder2/page2.html 

Есть ли способ t o получить этот результат, используя правила перезаписи в .htaccess?

Я прочитал этот вопрос: How to use mod_Rewrite to check multiple folders for a static file

но принятый ответ не работает для меня.

Заранее благодарим за любые советы.

ответ

1

вы можете использовать следующее правило в /news/.htaccess:

RewriteEngine on 

RewriteCond %{DOCUMENT_ROOT}/subfolder/$1.html -f 
RewriteRule ^(.*?)\.html$ /news/subfolder/$1 [L] 

будет переписан /news/file.html к /news/subfolder/file.html если file.html существует в /news/подпапка/.

Если ваш Htaccess находится в корневом каталоге, вы можете попробовать следующее

RewriteEngine on 

RewriteCond %{DOCUMENT_ROOT}/news/subfolder/$1.html -f 
RewriteRule ^news/(.*?)\.html$ /news/subfolder/$1.html [L] 

Если приведенные выше примеры терпят неудачу, вы можете попробовать это в корне или новостей/.htaccess:

RewriteEngine on 

RewriteCond %{REQUEST_FILENAME} !-f 
RewriteRule ^(?:news/)?(.*?)\.html$ /news/subfolder/$1.html [L] 
+0

Привет, спасибо для вашей помощи. Я пробовал свой код, но все равно не повезло: url /news/file.html дает 404, даже если файл в /news/subfolder/file.html существует. Я начинаю думать, что в серверных переменных что-то не так, потому что если я перейду в /news/subfolder/news1.html, код% {DOCUMENT_ROOT} /news/subfolder/$1.html станет C:/xampp/htdocs/news/subfolder/news/subfolder/file.html – Francesco2810

+0

Да, это проблема на некоторых серверах. Я выложу для вас рабочее решение. – starkeen

+0

@ francesco2810 См. Edit – starkeen