url-rewriting - 如何允许 WordPress 和 Laravel 通过 htaccess 共享顶级 URL

标签 url-rewriting .htaccess

编辑: 这是根据评论中的反馈以及对 meta.stackoverflow 的一些阅读,对我的问题进行的重大编辑。

我已经改变了我的目标,现在我的首要任务是在 Laravel 和 WP 之间路由顶级 URL:我不再寻求共享代码/数据库/用户信用等。

问题:我需要什么重写规则才能实现这样的 URL 结构:

/            // (home) delivered by WP
/content1    // WP
/content(n)  // WP
/dashboard   // delivered by Laravel
/widgets/mywidget/    // Laravel
  • 所有 Laravel 页面都将位于/admin 或/widgets 中,其他所有内容都将由 WordPress 处理,包括 404s
  • 我会将 WP 和 Laravel 完全分开。
  • 我和我的同事将使用管理员帐户编辑 WP,不会有其他 WP 用户
  • 我将完全单独管理这两个应用的演示

我已按如下方式设置我的文件,并测试了每个应用程序彼此独立工作。 (即,如果 Laravel 的重写规则是唯一使用的规则,则 Laravel 使用 laravel-index.php 可以正常工作)

来自网络根目录:public_html/

/wordpress
/laravel3   // app dir
/css        // these are from the laravel public dir 
/images     //
/js, etc    //
/index.php  // WP index.php
/laravel-index.php    // laravel's index.php

我处于共享托管环境中,无法访问 httpd.conf。

这是我的 .htaccess

RewriteEngine On
RewriteCond %{HTTP_HOST} ^www\.(.*)$ [NC]
RewriteRule ^(.*)$ http://%1/$1 [R=301,L]

# BEGIN WordPress
<IfModule mod_rewrite.c>
RewriteEngine On
RewriteBase /
RewriteRule ^widgets  -  [L]
RewriteRule ^index\.php$ - [L]
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule . /index.php [L]
</IfModule>
# END WordPress

# Laravel
<IfModule mod_rewrite.c>
RewriteRule !^widgets - [L]
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule ^(.*)$ laravel-index.php/$1 [L]
</IfModule>

这样:

  • 我可以访问我的 WordPress 页面,并且
  • WP 为未知 URL 提供 WP-404,但是
  • /widgets 获得普通服务器 404,而
  • /laravel-index.php/widgets 显示正确的内容。

另一个问题是 WP Dashboard 正在窃取对/dashboard 的请求,我想将其重定向到 Laravel

感谢您的阅读!

最佳答案

对于 WordPress,您需要将不在小部件或仪表板文件夹中的所有请求发送到 index.php

# BEGIN WordPress
<IfModule mod_rewrite.c>
RewriteEngine On
RewriteBase /
RewriteCond !^widgets
RewriteCond !^dashboard
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule . /index.php [L]
</IfModule>
# END WordPress

对于 Laravel,您需要执行相反的操作,仅将小部件或仪表板内的请求发送到 laravel-index.php

# Laravel
<IfModule mod_rewrite.c>
RewriteCond ^widgets
RewriteCond ^dashboard
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule ^(.*)$ laravel-index.php/$1 [L]
</IfModule>

关于url-rewriting - 如何允许 WordPress 和 Laravel 通过 htaccess 共享顶级 URL,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14605487/

相关文章:

url-rewriting - 在 Joomla 3 组件中将 GET 方法 URL 更改为 SEO URL

css - 为什么 css 和图像在 asp.net 中重写 URL 时会失真?

nginx - 带有尾部斜杠的奇怪 Nginx 行为

regex - Nginx 重写规则以从请求的 url 重定向到特定的 url

node.js - 重写www.在 Node.JS 中

.htaccess - htaccess 将所有流量重定向到 https ://www

.htaccess - redirectmatch更改帖子以获取

.htaccess - htaccess 子域 ssl 通配符无法打开文件

apache - 使用 htaccess 重定向

.htaccess 强制 404 并阻止目录列表