当Laravel项目位于子目录中时,我目前在使用.htaccess文件重写URL时出现问题。
通常不在子目录中时/ vacancies - > /index.php/vacancies使用以下.htcaccess文件工作。
<IfModule mod_negotiation.c>
Options -MultiViews
</IfModule>
RewriteEngine on
RewriteLog "/var/log/httpd/rewrite.log"
RewriteLogLevel 3
# Redirect Trailing Slashes If Not A Folder...
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule ^(.*)/$ /$1 [L,R=301]
# Handle Front Controller...
RewriteCond %{REQUEST_FILENAME} !-d
RewriteCond %{REQUEST_FILENAME} !-f
RewriteRule ^index.php [L]
# Handle Authorization Header
RewriteCond %{HTTP:Authorization} .
RewriteRule .* - [E=HTTP_AUTHORIZATION:%{HTTP:Authorization}]
虽然现在项目存在于一个子目录中,但我要求将URL重写为/ vacancies - &gt; /abc/index.php/vacancies。
主页正常工作,但任何链接只返回一个未找到的错误。
我需要进行哪些更改才能让.htaccess文件为我执行此操作。
所以在进入&rs; index.php&#39;后进一步调查进入网址本身页面加载正确,如果这有助于回答问题。
谢谢!
答案 0 :(得分:1)
我不会修改Laravel应用中提供的默认.htaccess
。您需要在站点的虚拟主机配置文件中使用Apache的目录别名。您需要具有以下格式:
#Change the paths accordingly
Alias /vacancies /path/to/app/public
<Directory /path/to/app/public>
Options Indexes FollowSymLinks Includes ExecCGI
AllowOverride All
Order allow,deny
Allow from all
Require all granted #If using Apache 2.4 add this.
</Directory>
答案 1 :(得分:1)
我设法解决了这个问题,感谢您的建议,结果证明这是虚拟主机文件的问题以及项目的创建地点,因为我有软链接让我们直接指向apache。
因此,Apache正在查看虚拟主机文件中设置的实际项目位置,而不是用于导致未找到问题的软链接。
答案 2 :(得分:0)
如果您使用的是apache,请检查apache httpd配置文件中的.ht *权限。我有同样的问题,我有权限被拒绝.htaccess文件的问题。如果您在共享主机上,请尝试联系托管支持。
答案 3 :(得分:0)
试过把它放在htaccess文件的顶部?在某种情况下帮助我,看起来很奇怪但确实如此。
答案 4 :(得分:0)
我注意到你已经设法“修复”了这个问题。但是,您发布的.htaccess
文件中存在一些基本错误,因此我不确定这是如何正常工作的?
RewriteLog "/var/log/httpd/rewrite.log" RewriteLogLevel 3
这两个指令在.htaccess
文件中无效,因此会导致500内部服务器错误。这些只能直接在服务器配置或虚拟主机上下文中使用。这些也是Apache 2.2指令,因此不适用于Apache 2.4。
RewriteRule ^index.php [L]
(“前控制器”的一部分)。您在第一个和第二个参数之间缺少空间,因此无法重写对index.php
- 您的“前端控制器”的任何请求。 (也许这只是一个错字,但很难看到像这样的拼写错误?)例如,这应该更像:
RewriteRule ^ index.php [L]
# Handle Authorization Header RewriteCond %{HTTP:Authorization} . RewriteRule .* - [E=HTTP_AUTHORIZATION:%{HTTP:Authorization}]
这些指令应该在前控制器之前,而不是在文件的末尾。否则,它们不会针对通过框架路由的任何请求执行。
当不在具有/空缺的子目录中时 - > /index.php/vacancies使用以下.htcaccess文件工作
实际上并不是上面.htaccess
代码的作用。它应该只是将请求重写为/index.php
。 (然后frawework / Laravel会查看所请求的完整URL。)如果它将URL重写为/index.php/vacancies
(某些框架会这样做),那么您需要使用路径名信息来读取URL (PATH_INFO)。
虽然现在项目存在于子目录中,但我要求将URL重写为
/vacancies
- &gt;/abc/index.php/vacancies
。
请参阅上文有关PATH_INFO的内容。但是,如果.htaccess
文件位于站点的文档根目录中,并且/abc
子目录应该完全隐藏,那么您仍有一些工作要做。您需要设置适当的RewriteBase
并修改从非目录中删除尾部斜杠的条件。
否则,如果/abc
目录是URL的一部分,那么.htaccess
文件可以移动到/abc
子目录,但是您仍然需要修改删除的指令尾随斜线。