2015-06-17 2 views
2

Моя компания застряла с GoDaddy, и мой .htaccess переписан не работает. Это отлично работает на моем локальном хосте.Простой .htaccess переписывать не работает на GoDaddy

Цель состоит в том, чтобы иметь example.com/about фактически получить example.com/about.php, с URL еще раз показывает example.com/about.

Вот мой файл .htaccess:

Options +FollowSymlinks -MultiViews -Indexes 

RewriteEngine on 

RewriteCond %{REQUEST_FILENAME}.php -f 
RewriteRule !.*\.php$ %{REQUEST_FILENAME}.php [QSA,L] 

Я прочитал все другие сообщения о непоследовательном поведении .htaccess с серверами GoDaddy. У меня есть подтверждение, что mod_rewrite включен, а мой PHP - 5.4.19. Надеюсь, кто-то прошел через это уже или может пролить некоторый свет ...

+3

Я думаю, проблема в том, что на GoDaddy не так много работы ... – Rasclatt

+0

Я согласен, что они ужасные и у них есть планы сбросить их. К сожалению, сейчас не время для переноса электронной почты всей компании и веб-хостинга. Я просто хочу, чтобы этот URL-адрес переписывался на данный момент. – PyroLemur

ответ

3

Вы должны упростить свое правило. Go Daddy раздражает, но это должно сработать.

RewriteEngine on 
RewriteBase/
RewriteCond %{REQUEST_FILENAME} !-d 
RewriteCond %{REQUEST_FILENAME} !-f 
RewriteRule ^([^/]+)/?$ /$1.php [L] 
+0

Спасибо за помощь. Я все равно получаю 500 Internal Server Error, однако :( – PyroLemur

+0

Попробуйте удалить эту + + FollowSymlinks –

+0

Все еще не работает. Спасибо еще раз. – PyroLemur

2

Это произошло довольно много раз - GoDaddy является синонимом таких проблем. Я рекомендую следующее:

Во-первых, поместите это в верхней части .htaccess файла:

RewriteEngine On 

# Remove php extension from the request by means of a redirect. 
# This should really be for php files that exist 
RewriteCond %{REQUEST_FILENAME} -f 
RewriteCond %{THE_REQUEST} ^[A-Z]{3,}\s([^.]+)\.php [NC] 
RewriteRule^/%1 [R,L,NC] 

Тогда попробуйте один из следующих после выше:

# 1. Map the request to a PHP file, if one exists 
RewriteCond %{REQUEST_FILENAME}.php -f 
RewriteRule^%{REQUEST_URI}.php [L] 
# 2. Map the request to a PHP file, if one exists (alternative method) 
RewriteCond %{REQUEST_FILENAME}.php -f 
RewriteRule ^(.*)$ /$1.php [L] 
# 3. Map the request to a PHP file, provided the request is not 
# a file or a directory. The PHP file in question does not need 
# to exist on the file system. 
RewriteCond %{REQUEST_FILENAME} !-f  
RewriteCond %{REQUEST_FILENAME} !-d  
RewriteRule ^(.*)$ /$1.php [L]  

Данная проблема может быть связана с директивой Options. Из прошлого опыта это обычно происходит от использования Includes в этой директиве - я понимаю, что GD этого не позволяет. Однако вы их не используете, поэтому попробуйте использовать одну из следующих комбинаций, чтобы увидеть, не появляется ли ошибка 500.

Options +FollowSymLinks -Multiviews 
Options +FollowSymLinks 
Options -Multiviews 

GD выключает Indexing по умолчанию, и поэтому нет необходимости использовать что в Options директиве.

Side Примечание: Вы уже знаете это, но не использовать php_value и php_flag в .htaccess файлов на GD-хостинга. Вместо этого вам нужно будет создать файл php5.ini со значениями и установленными там флагами.

Update: меня удалить RewriteBase (как это было известно, вызывает проблемы для некоторых пользователей) и сделали редирект/переписывает относительно корня домена.

+0

Майк, благодарю вас за очень тщательный ответ. Я пробовал все комбинации вышеперечисленного кода +, однако ошибка 500 - это все, что я получаю. Я определенно обвиняю это в GoDaddy. Если их техническая поддержка не может быть решена, я буду настаивать, чтобы моя компания покинула их раньше, чем позже. $ 3-4k/yr для обмена с кучей пользователей и многих доменов, и это тот вид услуг, которые они нам дают :( – PyroLemur

+0

Я искал решение этого какое-то время, это первый это сработало для меня. Спасибо! – ByteMyPixel

1

Я, наконец, понял это. Еще раз спасибо всем, кто нашел время, чтобы помочь. В корневом каталоге моей учетной записи хостинга был еще один файл .htaccess, который вызывал ошибку 500, которую я удалил.Затем я получил ошибку 400, которую я смог разрешить с помощью RewriteBase. Вот рабочий файл .htaccess:

RewriteEngine On 
RewriteBase /this_sites_subdirectory/ 
RewriteRule ^/?$ /1 [L] 

Options -MultiViews     

RewriteCond %{REQUEST_FILENAME}.php -f 
RewriteRule !.*\.php$ %{REQUEST_FILENAME}.php 
+0

Вы оставили очень важные детали, потому что, если вы используете вспомогательную директорию, которая меняет правила. С вашим примером было предположение, что оно было расположено в корне. Обязательно укажите свою точную проблему, когда задавайте вопросы, а не «общие» примеры. –

+0

Точка хорошо взята; В следующий раз я сделаю все возможное, чтобы предоставить более подробную информацию. URL-адреса в моем примере точны при отображении корневого уровня этого конкретного сайта, где на самом деле находятся мои файлы. Я понятия не имел, что файл .htaccess в другом месте моей учетной записи хостинга, за пределами папки, связанной с корнем этого домена, повлияет на этот сайт. Это главное, что я узнал здесь. – PyroLemur

2

Необходимо проверить, что сервер должен находиться на хостинге linux для работы htaccess. Htaccess работает только на хостинге Godaddy Linux, а не на хостинге Windows. Для оконного хостинга вам необходимо работать с web.cong для правила перезаписи.

0

спасибо. Это также помогло мне после недели головные боли с поддержкой GD

Здесь revices изменить, что я сделал для того, чтобы мой Subdreamer (да, я знаю, ughhh) сайты до сих пор дружественные URL-адресов, работающих

RewriteEngine On 
RewriteBase/
RewriteRule ^/?$ /1 [L] 

Options -MultiViews     

RewriteCond %{REQUEST_FILENAME} !-f 
RewriteCond %{REQUEST_FILENAME} !-d 
RewriteRule ^(.*) index.php 

Удача остальным

Смежные вопросы