.htaccess RewriteRule Проблема с сервером Mac OSX, отсутствует на сервере Unix - PullRequest
0 голосов
/ 28 января 2012

Я работаю над сайтом самолета и использую файл .htaccess, чтобы переписать URL-адреса, чтобы они были удобны для SEO. Вот файл:

AddType application/x-httpd-php /(.*)
Options +FollowSymLinks
RewriteEngine on
RewriteRule ^general-aviation-models/(.*)/(.*) /models.php?mfg=$1&model=$2
RewriteRule ^general-aviation/(.*)/(.*) /general.php?page=$1&sub=$2
RewriteRule ^general-aviation/(.*)  /general.php?page=$1
RewriteRule ^general-aviation  /index.php
RewriteRule ^military/(.*) /military.php?page=$1
RewriteRule ^military-models/(.*)/(.*) /military-models.php?mfg=$1&model=$2
RewriteRule ^military-models/(.*) /military-models.php?mfg=$1
RewriteRule ^cart/ /cart.php
RewriteRule ^contact/ /contact.php
RewriteRule ^commercial/(.*)/(.*) /commercial.php?page=$1&sub=$2
RewriteRule ^commercial/(.*)  /commercial.php?page=$1
RewriteRule ^commercial/ /commercial.php
RewriteRule ^links/ /links.php
RewriteRule ^about/ /about.php
RewriteRule ^tour/(.*)  /tour.php?page=$1
RewriteRule ^tour/ /tour.php

ExpiresDefault "access plus 10 years"
AddOutputFilterByType DEFLATE text/plain

Это сработало на сервере * nix, а также на MAMP в моей локальной среде разработки, однако при переходе на сервер Mac OSX некоторые (но не все) правила не выполняются. В частности, они терпят неудачу:

RewriteRule ^military-models/(.*)/(.*) /military-models.php?mfg=$1&model=$2
RewriteRule ^military-models/(.*) /military-models.php?mfg=$1
RewriteRule ^commercial/(.*)/(.*) /commercial.php?page=$1&sub=$2
RewriteRule ^commercial/(.*)  /commercial.php?page=$1

Другие примечания:

  • модуль mod_rewrite успешно загружается (отображается в разделе Loaded Modules в phpinfo ())
  • У меня есть AllowOverride All в моем httpd.conf файле (в соответствующих тегах)
  • API моего сервера Обработчик Apache 2.0

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

/my_specific/document_root/.htaccess: DocumentRoot not allowed here

Есть предложения?

UPDATE:

Оказывается, в Apache была включена функция Multiviews, которая, в любом случае, работала для большинства моих переписываний, но переопределяла их и вызывала 4 перечисленных ошибки. Все, что мне нужно было сделать, это добавить это в начало моего файла htaccess:

Options -MultiViews

Ответы [ 2 ]

4 голосов
/ 23 февраля 2012

Оказывается, функция Apache Multiviews была включена по умолчанию, которая в любом случае работала для большинства моих переписываний, но переопределяла их и вызывала 4 перечисленных ошибки. Все, что мне нужно было сделать, это добавить это в начало моего файла htaccess:

Options -MultiViews
0 голосов
/ 28 января 2012

Вот как бы я изменил ваши рерайверы:

AddType application/x-httpd-php /(.*)
Options +FollowSymLinks
RewriteEngine On

RewriteRule ^/?$ /index.php [NC,QSA,L]
RewriteRule ^(tour|cart|links|about|military(-models)?|general-aviation|commercial|contact)/?$ /$1.php [NC,QSA,L]

RewriteRule ^general-aviation-models/([^/]+)/(.*) /models.php?mfg=$1&model=$2 [NC,QSA,L]
RewriteRule ^general-aviation-models/(.+) /models.php?mfg=$1 [NC,QSA,L]

RewriteRule ^general-aviation/([^/]+)/(.*) /general.php?page=$1&sub=$2 [NC,QSA,L]
RewriteRule ^general-aviation/(.+)  /general.php?page=$1 [NC,QSA,L]

RewriteRule ^military-models/([^/]+)/(.*) /military-models.php?mfg=$1&model=$2 [NC,QSA,L]
RewriteRule ^military-models/(.+) /military-models.php?mfg=$1 [NC,QSA,L]

RewriteRule ^commercial/([^/]+)/([^/]+) /commercial.php?page=$1&sub=$2 [NC,QSA,L]
RewriteRule ^commercial/(.+)  /commercial.php?page=$1 [NC,QSA,L]

RewriteRule ^military/([^/]+) /military.php?page=$1 [NC,QSA,L]
RewriteRule ^tour/(.+)  /tour.php?page=$1 [NC,QSA,L]

ExpiresDefault "access plus 10 years"
AddOutputFilterByType DEFLATE text/plain

Кстати, извините, но я могу улучшить ваш дизайн.

Обычно люди перенаправляют все на index.php, а затем декодируют URL в коде Php.

Подумай об этом;)

...