2016-06-19 2 views
-1

Я настроил Usbserver как мой локальный веб-сервер на своем компьютере, так что корень сервера http://localhost:8081/, но все мои веб-проекты находятся в подкаталоге http://localhost:8081/WWW/PHP/ моего локального сервера.localhost vs. remote server htaccess Значения

Сейчас: все работает нормально - все относительные пути работают как надо, но, как я играю с файлом .htaccess, и я хочу, чтобы настроить свою собственную страницу 404.php с относительным путем, как это:

ErrorDocument 404 /php/errors/404.php 

... он просто не работает, как ожидалось, потому что это, конечно, указывает на http://localhost:8081/, а не на http://localhost:8081/WWW/PHP/myproject/, что является моим фактически действующим видом корневого сервера (cos, однажды загруженный на удаленный сервер, это станет http://myproject.com/) ,

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

ErrorDocument 404 ./php/errors/404.php 

... но в конечном итоге с пустой белой страницей с предложением «./php/errors/404.php» отображается.

ВОПРОС: как писать код в .htaccess «универсально», поэтому было бы думать, что корневой сервер находится в «MyProject» директории вместо «http://localhost:8081/», но когда-то загрузил на мой удаленный сервер, скажем http://myproject.com/ его будет работать нормально?

ПОМНИТЕ: Я не могу использовать переписывания корень моего локального сервера в настройках Usbserver, потому что я есть также квант других веб-страниц в «http://localhost:8081/WWW/PHP», так что все они перестают работать таким образом!

Я предполагаю, что есть какой-то код RegEx, который бы разрешил это (как я много раз видел здесь, когда ребята Stackoverflow делали такие вещи таким образом), но я очень плохо чувствую себя в RegEx, поэтому без помощи других я "потерял".

Я уже искал веб-сайт, прежде чем спрашивать об этом здесь: было много решений, но я не нашел таких, которые действительно решали бы эту конкретную задачу (большинство из них предлагает просто переписать корень сервера в моем виртуальном сервере - Usbserver - настройки, которые я не могу по причине, описанной выше).

Мне просто нужно, чтобы он работал нормально на локальном хосте и на удаленном сервере после этого, не переписывая мой код .htaccess каждый раз, когда я загружаю свой сайт на удаленный сервер и наоборот.

PS: Я также заметил, что, когда я создал свою собственную страницу 404.php с absolutle путь для моего локального сервера, как:

ErrorDocument 404 http://localhost:8081/WWW/_PHP_/myproject/php/errors/404.php 

... это работает, но это изменить URL для этой страницы 404 вместо того, чтобы оставаться на исходном «не существующем» URL-адресе - почему? При нормальной нормальной не-отредактированной 404 странице изменение сокета URL-адреса меняется, оно остается неизменным (= эта несуществующая ссылка).

EDIT - ЗАВЕРШЕНИЕ РЕШЕНИЕ: Так после нескольких часов игры, просматривая Интернет, ищут любые биты некоторой дополнительной полезной информации, которую я, наконец, получил это работает именно так, как я хотел - другой каталог для страниц ошибок (404 и т.д.) указанный в случае локального хоста и удаленного сервера, вот он (заметьте: это мой собственный код, чтобы он выглядел не очень хорошо - я новичок.Htaccess вещи - но, по крайней мере, это действительно работает для меня, как я ожидал, что он работает):

# RULES FOR ERROR PAGES DIRECTORY IN CASE OF localhost:8081 
RewriteCond %{REQUEST_FILENAME} !-f 
RewriteCond %{REQUEST_FILENAME} !-d 
RewriteCond %{HTTP_HOST} ^localhost:8081 [NC] 
RewriteRule .? /WWW/_PHP_/myproject/php/errors/404.php [L] 

# RULES FOR ERROR PAGES DIRECTORY IN CASE OF remote server (actual webpage on public server) 
RewriteCond %{REQUEST_FILENAME} !-f 
RewriteCond %{REQUEST_FILENAME} !-d 
RewriteCond %{HTTP_HOST} !^localhost:8081 [NC] 
RewriteRule .? /php/errors/404.php [L] 
+0

почему этот вопрос downvoted действительно мистерия ко мне, но хорошо, что угодно, ребята – errerr

ответ

0

Это рабочий раствор

# RULES FOR ERROR PAGES DIRECTORY IN CASE OF localhost:8081 
RewriteCond %{REQUEST_FILENAME} !-f 
RewriteCond %{REQUEST_FILENAME} !-d 
RewriteCond %{HTTP_HOST} ^localhost:8081 [NC] 
RewriteRule .? /WWW/_PHP_/myproject/php/errors/404.php [L] 

# RULES FOR ERROR PAGES DIRECTORY IN CASE OF remote server (actual webpage on public server) 
RewriteCond %{REQUEST_FILENAME} !-f 
RewriteCond %{REQUEST_FILENAME} !-d 
RewriteCond %{HTTP_HOST} !^localhost:8081 [NC] 
RewriteRule .? /php/errors/404.php [L] 
0

Относительный путь не допускается в директиве документа об ошибке. поэтому вы можете использовать абсолютный путь вместо полного URL-адреса.

ErrorDocument 404 /www/_php_/myproject/php/errors/404.php 

Ссылка:

https://httpd.apache.org/docs/2.4/custom-error.html

+0

извините, но это это не решение, потому что я сказал в своем вопросе, что он не будет работать как на локальном хосте, так и на удаленном сервере + Я уже сказал, что я пробовал это, и да, он работал нормально, но это как не подходит для моей потребности (прочитайте вопрос, пожалуйста) – errerr

+0

Я думаю, что ваше требование не может быть и речи. Для достижения этой цели вам потребуется использовать mod-rewrite. пожалуйста, ознакомьтесь с документом ErrorDocument, упомянутым выше. – starkeen

+0

только во избежание недоразумений здесь - я не говорю, что вы ошибаетесь или не правы (потому что вы есть), я только говорю, что это не поможет мне + Я жду ** ЗА ЛЮБОЕ РЕШЕНИЕ **, пусть будет RewriteEngine/RewriteCond/RewriteRule или что-нибудь еще, что решило бы это ... ;-) – errerr