【问题标题】:htaccess rewrite rule for backend/frontend app后端/前端应用程序的 htaccess 重写规则
【发布时间】:2018-08-03 18:19:46
【问题描述】:

我有一个后端和前端分开的 yii 应用。我正在尝试制作友好的网址。 我尝试了一些在线工具,但无法正确使用 所以我想要这个网址

  • http://mydomain.lc/abs/admin/some/crazy/urls(for example some/crazy/urls can be admin/index)

将被改写为:

  • http://mydomain.lc/abs/backend.php/some/crazy/urls(because this url works directly)

我也有前端站点,但它们都在同一个项目中,所以它们共享 .httacess。 前端 .htaccess 的规则是: 这个网址:

  • http://mydomain.lc/abs/some/crazy/urls(some can not be admin here, so we can differentiate btw fron and back end)

应该是

  • http://mydomain.lc/abs/index.php/some/crazy/urls

我有:

<IfModule mod_rewrite.c>
    RewriteEngine On 
    RewriteBase /

    RewriteCond %{REQUEST_FILENAME} !-d
    RewriteCond %{REQUEST_FILENAME} !-f
    RewriteRule ^abs/admin/?(.*?)$ abs/backend.php?url=$1 [QSA,L]

    RewriteCond %{REQUEST_FILENAME} !-d
    RewriteCond %{REQUEST_FILENAME} !-f
    RewriteRule ^(?!abs/admin\/)(.*?)$ abs/index.php?url=$1 [QSA,L]

</IfModule>

上面的脚本不工作。 根目录在 abs 文件夹下,.htaccess 在根目录下

【问题讨论】:

  • 哪个不工作?第一个还是第二个 RewriteRule?或者两者兼而有之?
  • Root 应该是 http://mydomain.lc/ 而不是 http://mydomain.lc/abs/ 如你所说。请解释并确认.htaccess文件在哪里。
  • root 在这里:http://mydomain.lc/abs/,因为我不欠我放它的地方,所以项目位于(开始点 index.php)下 abs 和 .htaccess 在那里,但不是直接在 http://mydomain.lc / 谢谢
  • @OlafDietsche 两者 :(。但是如果我将项目直接放在 mydomain.lc 下并从规则中删除所有 abs 就可以了。但是我在生产服务器中有 abs :(
  • 例如,在您的规则中,替换 URL 将是 backend.php?url=/some/crazy/urls,但在您的示例中,您有 backend.php/some/crazy/urls。那么,它是哪一个?

标签: apache .htaccess url-rewriting


【解决方案1】:

除了RewriteBase /RewriteBase /abs 之外,您无需更改任何内容

RewriteEngine On 
RewriteBase /abs

RewriteCond %{REQUEST_FILENAME} !-d
RewriteCond %{REQUEST_FILENAME} !-f
RewriteRule ^admin/?(.*?)$ backend.php?url=$1 [QSA,L]

RewriteCond %{REQUEST_FILENAME} !-d
RewriteCond %{REQUEST_FILENAME} !-f
RewriteRule ^(?!admin\/)(.*?)$ index.php?url=$1 [QSA,L]

【讨论】:

  • 作为一个魅力。谢谢。
【解决方案2】:

我猜问题出在RewriteBase

你可以在/abs目录下的.htaccess文件中试试这个:

更新根据最后的 OP 评论:this one is correct: backend.php/some/crazy/urls

Options +FollowSymlinks -MultiViews
RewriteEngine On
RewriteBase /abs

# Backend admin
RewriteCond %{REQUEST_URI} !backend\.php  [NC]
RewriteRule ^admin(.*)  /backend.php/$1   [QSA,L,NC]

# Frontend
RewriteCond %{REQUEST_URI} !index\.php      [NC]
RewriteCond %{REQUEST_URI} !admin           [NC]
RewriteRule ^(.*)     /index.php/$1   [QSA,L,NC]

【讨论】:

  • 感谢您的贡献。我们可以更正此规则以重写此规则:backend.php/some/crazy/urls 而不是 admin/backend.php?url= 非常感谢。
  • 注意在 backend.php 之前重写的 url 中不应该有 admin,在 RewriteRule ^admin(.*) admin/backend.php/$1 [QSA,L,NC] 中应该是 backend.php/admin,不是吗?我不知道正则表达式,但最终重写的应该是http://mydomain.lc/abs/backend.php/some/crazy/urls
  • 你是对的。删除 admin/ 部分。我会修改我的答案。
  • 已修改。请试一试。
猜你喜欢
  • 2014-02-19
  • 1970-01-01
  • 1970-01-01
  • 2011-11-03
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多