Косая черта в URL и виртуальном хосте

#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