【问题标题】:Remove directory names from url从 url 中删除目录名称
【发布时间】:2016-07-04 10:02:02
【问题描述】:

我在 Lumen 有一个新项目,需要部署到暂存服务器,我已经完成了。我遇到了从 URL 中删除目录名称的问题。我的项目目录是这样的:

DIR - ProjectName
   DIR - ProjectName {Lumen files inside this directory}
     DIR - app
     DIR - bootstrap
     DIR - database
     DIR - public
     DIR - resources
     DIR - storage
     DIR - tests
     DIR - Vendor

所以目前要查看我的应用程序,我需要输入这样的网址:

http://stagingserverdomain.com/ProjectName/ProjectName/public/login

但是我希望我的网址是这样的:

http://stagingserverdomain.com/ProjectName/login

我已经尝试了 SO 的许多答案,但它不起作用。

【问题讨论】:

  • 您需要检查 Nginx 或 Apache 的服务器设置。更改文档根变量,您就可以开始了。或者只是将所有文件夹上移到父文件夹。
  • 是的,我知道,但是项目仍然以这种方式部署,我不允许移动文件,因为父目录包含一些其他文件(与开发无关)
  • 想一想,向上移动文件夹甚至都行不通,因为 Nginx/Apache 甚至都没有在寻找公共文件夹。如果您确实无法更改这些设置,我建议您联系您的网站管理员并让他进行更改。如果他们也不这样做,请按照thickguru的回答。

标签: php .htaccess mod-rewrite lumen


【解决方案1】:

使用这个:

RewriteEngine On
RewriteRule ^Projectname/login$ /ProjectName/ProjectName/public/login [L]

它应该为您提供以下 URL:

http://stagingserverdomain.com/ProjectName/login

【讨论】:

  • 那不是解决问题而不解决根本问题吗?
  • .htaccess 文件的位置是什么?
  • 把它放在你的根目录下。
  • 我做到了,没有改变
  • 旧 url 仍然有效,新 url 抛出 NOT FOUND 错误表单 apache
【解决方案2】:

好问题!将此 Apache httpd RewriteRule 添加到您的 httpd.conf 文件中的相应服务器定义中:

RewriteEngine On
RewriteRule ^/(ProjectName)/((?!\1).*)  /$1/$1/public/$2

或者,将其添加到 Web 服务器根目录下的 .htaccess 文件中,例如,第一个 ProjectName 目录所在的位置:

RewriteEngine On
RewriteRule ^(ProjectName)/((?!\1).*)   $1/$1/public/$2

或者,将其添加到第一个ProjectName 目录(第二个ProjectName 目录所在的位置)内的.htaccess 文件:

RewriteEngine On
RewriteRule ^((?!ProjectName).*)    ProjectName/public/$1

或者(这是推荐的做法),切换到nginx,然后执行以下操作:

location /ProjectName {
    rewrite ^/([^/]+)/((?!\1).*)$   /$1/$1/public/$2;
}

上面的代码确保了rewrite只有在你的网址还没有包含ProjectName/ProjectName时才会发生(使用PCRElookahead assertions,这是@987654326的库@ 和Apache 用于支持regular expressions),因此不会出现任何无限重定向循环。

【讨论】:

  • 好的,这在一定程度上有效,我尝试将. htaccess 添加到第一个ProjectName 目录,因为这是最方便的,但是网址http://stagingserverdomain.com/ProjectName/login 仍然将我带到404 页面,但是这次页面是由 lumen 框架而不是 apache Server 呈现的。
  • @AngryCoder,那么恐怕你必须在RewriteRule 的末尾添加一个[R] 来发出从短到长符号的HTTP 重定向,作为你的流明事情必须查看原始请求 URL 以进行最终处理,而不是像大多数事情在大多数情况下所做的那样在内部重写。
  • @AngryCoder,您是否尝试按照我的建议添加[R]?如果这对您有用并解决了问题,我将不胜感激并接受我的工作。
  • 是的,我也试过了,但这并没有解决问题
  • @AngryCoder,我认为你应该再试一次。拥有[R] 肯定是一个很好的折衷解决方案,您仍然可以根据需要使用短 URL,它们会自动映射到长 URL。
猜你喜欢
  • 2013-10-31
  • 2019-06-19
  • 2020-05-11
  • 2013-07-16
  • 1970-01-01
  • 2020-01-31
  • 1970-01-01
相关资源
最近更新 更多