htaccess 中的 Apache RewriteRule - 路由已损坏
Posted
技术标签:
【中文标题】htaccess 中的 Apache RewriteRule - 路由已损坏【英文标题】:Apache RewriteRule in htaccess - Routes are broken 【发布时间】:2018-06-22 19:09:54 【问题描述】:我有一个简单的结构:
Root
|-- [app] (Symfony Application)
| |-- [app]
| |-- [bin]
| |-- [src]
| |-- [vendor]
| |-- [web]
| |-- .htaccess (Symfony htaccess)
|
|-- [wp-admin]
|-- [wp-content]
|-- [wp-include]
|-- .htaccess (Root htaccess)
我需要以下映射:
http://example.com ==> Wordpress
http://example.com/app ==> Symfony Application
这就是我所拥有的:
根 htaccess:
<IfModule mod_rewrite.c>
RewriteEngine On
RewriteRule ^app(.*)$ app/web/$1 [L,QSA]
RewriteBase /
RewriteRule ^index\.php$ - [L]
RewriteCond %REQUEST_FILENAME !-f
RewriteCond %REQUEST_FILENAME !-d
RewriteRule . /index.php [L]
</IfModule>
Symfony htaccess:
DirectoryIndex app.php
<IfModule mod_negotiation.c>
Options -MultiViews
</IfModule>
<IfModule mod_rewrite.c>
RewriteEngine On
RewriteCond %REQUEST_URI::$1 ^(/.+)/(.*)::\2$
RewriteRule ^(.*) - [E=BASE:%1]
RewriteCond %HTTP:Authorization .
RewriteRule ^ - [E=HTTP_AUTHORIZATION:%HTTP:Authorization]
RewriteCond %ENV:REDIRECT_STATUS ^$
RewriteRule ^app\.php(?:/(.*)|$) %ENV:BASE/$1 [R=301,L]
RewriteCond %REQUEST_FILENAME -f
RewriteRule ^ - [L]
RewriteRule ^ %ENV:BASE/app.php [L]
</IfModule>
<IfModule !mod_rewrite.c>
<IfModule mod_alias.c>
RedirectMatch 302 ^/$ /app.php/
</IfModule>
</IfModule>
问题:
问题是,Symfony 路由没有解决:
找不到“GET /”的路由
有什么简单的解决办法吗?
【问题讨论】:
您可以更改的内容是否有任何限制?例如,如果网络托管服务提供商不给您 SSH 访问权限或不允许更改底层 Apache 配置或模块,或者您不能更改项目的目录结构? 我没有 shell 访问权限。我在 url 中有一个带有/web
的解决方案,但我想用一个简单的解决方案来摆脱它。我不想破坏 Symfony 的目录结构
如果您至少有某种管理工具,您也许可以将子域指向 web 文件夹?
【参考方案1】:
此解决方案需要 ssh 访问权限。
放弃所有基于 htaccess 规则的解决方案。尝试使用符号链接代替 ln -s 命令
这里最好的办法是将每个项目放在您的域指向的单独文件夹 otuside 文件夹中(我们在这里将其命名为 public_html)
ROOT
|
-[Symfony]
-[WP]
-[public_html] (folder where your domain is pointing)
现在 - 删除 public_html - 添加符号链接到 wp(公共 html 的名称) - 包括 wp 创建到 symfony/web 的符号链接
ROOT
|
-[Symfony]
-[WP]
-- [app] (symbolic link to symfony/web)
-[public_html] (symbolic link to WP )
作为替代方案,我认为可能是将请求从 symfony 重定向到 wp,然后将 wp 响应推送给用户(来自 symfony)。我见过这样的解决方案(当您在旧系统之上构建新应用程序时使用它)。但这比符号链接更有问题(你可以在这里看到这个想法https://www.enotogorsk.ru/en/2014/07/22/symfony-legacy-bridge/)
【讨论】:
请清楚地使用标准目录结构(如我的)。我不明白你的符号以上是关于htaccess 中的 Apache RewriteRule - 路由已损坏的主要内容,如果未能解决你的问题,请参考以下文章
.htaccess用于Wordpress子文件夹中的Codeigniter
如果 url 包含使用 htaccess 的特定字符串,则重定向
使用 .htaccess 将 http 重定向到 https 时,某些 url 出现奇怪的 401 错误