#apache #.htaccess #url #laravel #virtualhost
#apache #.htaccess #url #laravel #virtualhost
Вопрос:
У меня есть проект laravel на localserver, и я хочу, чтобы он работал, даже когда к URL добавляется косая черта в конце. Он отлично работает при доступе с URL-адреса локального хоста. htaccess выглядит следующим образом:
<IfModule mod_rewrite.c>
<IfModule mod_negotiation.c>
Options -MultiViews
</IfModule>
RewriteEngine On
RewriteBase /LaravelProject/public/
# Redirect Trailing Slashes...
RewriteRule ^(.*)/$ $1 [L,R=301]
# Handle Front Controller...
RewriteCond %{REQUEST_FILENAME} !-d
RewriteCond %{REQUEST_FILENAME} !-f
RewriteRule ^ index.php [L]
Пытаюсь получить доступ к странице, подобной
http://localhost/LaravelProject/public/login
and
http://localhost/LaravelProject/public/login/
работает нормально.
Однако у меня также есть VirtualHost, определенный следующим образом
<VirtualHost *:80>
DocumentRoot "C:/wamp/www/LaravelProject/public"
ServerName LaravelProject.dev
ServerAlias www.LaravelProject.dev
ErrorLog "c:/wamp/logs/apache_error.log"
CustomLog "c:/wamp/logs/access.log" common
</VirtualHost>
Через URL laravelproject.dev
я могу получить доступ к корню документа и увидеть «Вы прибыли». Но когда я пытаюсь получить доступ к другому URL, скажем, laravelproject.dev/login
, это выдает меня 500 Internal Server Error
.
Если я удалю RewriteBase
из .htaccess
и изменю RewriteRule
как
RewriteRule ^(.*)/$ /$1 [L,R=301]
тогда URL-адреса laravelproject.dev/login
и laravelproject.dev/login/
работают нормально.
Если я сделаю это, снова проблема с localhost
URL-адресом с косыми чертами в конце и
URL http://localhost/LaravelProject/public/login/
перенаправляет на http://localhost/login
.
Я хочу иметь возможность использовать URL-адреса localhost и virtualhostс косыми чертами и без них и выдавать одинаковый результат. Как мне кажется, для меня это одно или другое.
Ответ №1:
Я не думаю, что вам нужны какие-либо из этих строк в вашем файле .htaccess. Я настроил свой таким образом в нескольких проектах, и он отлично работает:
<IfModule mod_rewrite.c>
<IfModule mod_negotiation.c>
Options -MultiViews
</IfModule>
RewriteEngine On
# Handle Front Controller...
RewriteCond %{REQUEST_FILENAME} !-d
RewriteCond %{REQUEST_FILENAME} !-f
RewriteRule ^ index.php [L]
</IfModule>
Комментарии:
1. Следуя вашему подходу, когда я добавляю косую черту в URL, эта страница работает. Но когда я перехожу к другим ссылкам с этой страницы, URL-адрес просто добавляется, поскольку база перезаписи не установлена. Это только для URL-адреса локального хоста. Даже если я установлю базу перезаписи, она не будет работать для нелокального URL-адреса, такого как laravelproject.dev.
2. Это приводит меня к выводу, что большая проблема исходит от вашего виртуального хоста. Попробуйте заменить *:80 конкретным виртуальным именем laravelproject.dev:80. Это должно выглядеть так pastebin.com/agT8HrRC