Увімкніть перезапис URL-адрес (mod_rewrite) за допомогою файлів .htaccess у ~ / Sites on Lion


13

Я не можу змусити mod_rewrite працювати над Левом. Я розробляю декілька веб-сайтів локально, на ~ / сайтах, використовуючи файли .htaccess. Я 10.7.3, і я не торкнувся жодних файлів конфігурації, крім включення PHP у httpd.conf (що працює).

Я знаю, що з цього приводу є щонайменше 2 питання, але детальні рішення там не працюють. Як і інші рішення, які я знайшов в Інтернеті. Я, мабуть, роблю щось дурне або щось переглядаю, інакше я, мабуть, божеволію, але це не працює.

Я спробував усі звичайні речі:

  1. В /private/etc/apache2/users/<myusername>.conf, зміни AllowOverride Noneдо AllowOverride Allі перезапустити веб - сервер

  2. Крім того, /private/etc/apache2/httpd.confзмініть будь-які / всі випадки (випадки) AllowOverride Noneна AllowOverride All- я пробував це у всіх різних місцях, де ці директиви знайдені

  3. Спробуйте в основному всі можливі комбінації значень для Optionsрядка над / під AllowOverrideрядком, включаючи значення:Indexes MultiViews FollowSymLinks All

Завжди перезапускайте веб-сервер після такої зміни, звичайно. Ніщо з цього не працює. Усі мої чисті адреси просто не працюють; Я отримую 404 - не знайдено. Журнал помилок Apache просто дає мені помилки "Файл не існує:". Тож здається, що модуль mod_rewrite навіть не працює.

Я переконався, що mod_rewrite завантажений у httpd.conf, яким він є; це так за замовчуванням при встановленні Lion.

Божевільна річ у тому, що все працювало чудово - поки я не перейшов на нову машину під управлінням Лева. Тобто я виключаю помилку у своїх файлах .htaccess, оскільки знаю, що вона працювала раніше. Крім того, якщо це була помилка в .htaccess, я отримав би якесь повідомлення про помилку з модуля mod_rewrite в error_log Apache, принаймні, сказав мені, що сам модуль викликається. Але цього не відбувається.

Я щось переглядаю? Чи потрібно міняти налаштування конфігурації ще десь? Чи потрібно змінювати конфігурацію PHP? Чому інструкції (наприклад, як активувати mod_rewrite на MacOSX Lion та змусити mod_rewrite працювати на Mac OS X ) працюють для інших людей, але не для мене? :)

Я на це вже витрачав години. Будь-яка допомога буде ДУЖЕ вдячна.


До речі, я не хочу використовувати MAMP. Раніше я використовував MAMP, і він не дуже добре грав з MySQL, який вже є в моїй системі. Це замінило б один головний біль іншим головним болем, тому немає подяки :)
Niels Heidenreich

До речі, я перебуваю на стандартному OS X Lion, а не на Lion Server.
Нільс Гайденрайх

Це не дає відповіді на запитання, але альтернативою боротьбі з локальним середовищем вашого Mac для веб-розробників є використання чогось типу Vagrant , що дозволяє легко налаштувати та керувати конфігураціями віртуальної машини.
Dan J

Відповіді:


12

Ви повинні переконатися, що у /etc/apache2/users/username.conf ви маєте наступне:

<Directory "/Users/username/Sites/">
    Options Indexes MultiViews FollowSymlinks
    AllowOverride All
    Order allow,deny
    Allow from all
</Directory>

Тут важливі функції FollowSymlinks і AllowOverride. Поки ви натякаєте на обидва у своєму питанні, можливо, ви їх не налаштували правильно в тандемі.

Переконайтеся, що в httpd.conf /private/etc/apache2/extra/httpd-userdir.conf також включено. Це за замовчуванням.

Після будь-яких модифікацій перезавантажте веб-сервер, щоб зміни набрали чинності.

Якщо у вас все ще виникають проблеми, можливо, виникла проблема з вашими фактичними правилами перезапису. Чи використовували ви їх і в контексті .htaccess? Зауважте, що в .htaccess, регулярний регекс правила перезапису порівнюється з URI запиту без провідної косої риски і завжди відносно каталогу, де знаходиться. відносно кореня веб. Оскільки, мабуть, у вас є .htaccess у підкаталозі ~ / Sites, ваші правила перезапису можуть поводитись інакше, ніж коли .htaccess перебуває у веб-корені (віртуального) хоста.

Для налагодження mod_rewrite можна включити перезапис журналу. Ви повинні ввімкнути це в /etc/apache2/httpd.conf:

RewriteLogLevel 3
RewriteLog /path/to/rewrite.log

Дякую Геррі. Так, я спробував це; просто спробував ще раз; на жаль, не працює. Я не змінив .htaccess, він є у ~ / Sites /…, як це було раніше. Це занадто засмучує :(
Niels Heidenreich

Спробуйте ввімкнути перезапис журналу, як я змінив вище.
Джеррі

Гаразд, це зовсім не проблема з mod_rewrite, як здається; це файл .htaccess, який повністю ігнорується. Я можу розмістити в ньому будь-які сміття, і я не отримую повідомлення про помилку. Тож Apache не завантажує його. Я перевірив дозволи, вони в порядку (файл читається у всьому світі). Я спробував зробити його виконуваним, без змін.
Нільс Хайденрайх

Якщо я поміщу .htaccess в / Library / WebServer / Documents і відкрию " localhost ", щоб перевірити його, це працює як очікувалося. Він просто не працює в "~ / Сайтах".
Нільс Хайденрайх

Я зробив щось божевільне і створив другий обліковий запис користувача з іменем входу "testitester". Я встановив AllowOverride для всіх у .conf цього користувача. Я помістив .htaccess, що містить сміття, у папку Сайти цього користувача. Якщо я перейду до localhost / ~ testitester, я отримаю помилку 500, як очікувалося.
Нільс Гайденрайх

1

Додавання параметрів + FollowSymLinks для мене добре працювало

Options +FollowSymLinks

RewriteEngine on
RewriteBase /
RewriteRule

з чим це робиться Options +FollowSymLinks?
Додаю

1

У мене виникла подібна проблема, коли мій файл .htaccess повністю ігнорувався, перебуваючи в підпапці в моєму каталозі ~ / Sites під VirtualHost, який був налаштований правильно.

Провівши останню годину, граючи з різними файлами конфігурації та встановивши AllowOverride All у різних місцях, я нарешті з’ясував, що файл .htaccess, хоча він виглядав як .htaccess файл у Finder, насправді був .htaccess.txt файл із розширення приховано.

Щоб перевірити та змінити файл .htaccess, клацніть правою кнопкою миші та виберіть Отримати інформацію, а потім переконайтесь, що вилучите будь-яке провідне розширення з кінця, наприклад, таке, яке у мене було:

А тепер це працює!


1

Нижче виправлено записи .htaccess

Options Indexes FollowSymLinks


<ifModule mod_rewrite.c>

RewriteEngine On
#RewriteBase /~charles/Sites/Timesheet/
RewriteCond %{REQUEST_FILENAME} !-f
RewriteRule ^(.*)$ index.php/$1 [NC,QSA,L]


</ifModule>

0

Розміщення .htaccess в / Бібліотека / WebServer / Документи та відкрити "localhost /"; протестувати його, працює як очікувалося. Він просто не працює в "~ / Сайтах". Дякую Нільсу Хайденрайху за це!


-1

Коли ви вводите: / Users / username / app_name

/ Відноситься до кореня веб-сервера:

"localhost /"

Якщо ви використовуєте / ~ username / app_name у своєму перезаписі, воно має працювати.


1
Шляхи, що починаються з /Apache, завжди є абсолютними шляхами, див. Визначення кореня веб-сервера в http.conf ( <Directory "/Library/WebServer/Documents">)
nohillside
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.