我正在尝试为.htaccess获取正确的语法而没有任何结果......
我的网址为domain.com/app/public/pageName。
它工作正常,但我会“隐藏”浏览器中的“app / public /”部分,基本上做了类似的事情:
[real URL] domain.com/app/public/pageName -> domain.com/pageName [what users type and see in browsers]
我认为以这种方式它应该更具可读性和seo友好性。
正如我从文档中理解的那样(也许这是错误的,因为它不起作用......)我应该告诉Apache将所有URL(如domain.com/pageName)映射/重定向到domain.com/app/public/pageName,但是仅在内部,以便在用户的浏览器中显示最小的URL。
现在我有类似的东西:
RewriteEngine on
#RewriteBase /app/public/
RewriteCond %{REQUEST_FILENAME} !-d
RewriteCond %{REQUEST_FILENAME} !-f
RewriteRule ^(.+)$ https://localhost/app/public/index.php?url=$1 [QSA,L]
(我正在使用https:// ...的完整网址,以便在我将所有内容上传到我的托管时快速轻松地进行调整,是不是?)。
问题是RewriteRule实际上更改了URL,因为它执行重定向并且URL重写它不在内部处理。
所以,首先:我可能会做什么?如果是这样,我怎样才能在内部处理URL重写?
所有内容都应该上传到共享主机,所以我没有.htaccess。 无论如何,如果没有其他可能性,我可以考虑升级到vps ......
谢谢!
==============
编辑(现在应该更清楚了)
tl; dr版本:
我正在寻找一种方法,让用户输入domain.com/pageName(他们会在浏览器中看到该地址)并在内部重写该网址以指向domain.com/app/public/pageName
==============
更多:在/ app / public /之后可以有任意数量的元素,用/分隔。所有这些元素都附加在index.php之后的URL末尾。最后的URL如下所示:
domain/app/public/index.php?url=lot/of/elements/here
这已经在上面发布的RewriteRule中使用了,我也会保留它。 谢谢!
答案 0 :(得分:0)
这对我来说很好,希望它也适合你。
RewriteEngine on
RewriteBase /
RewriteCond %{REQUEST_URI} ^/app/public
RewriteRule ^app/public/(.*)$ /$1 [L,QSA]
答案 1 :(得分:0)
仅供参考,我找到了一个解决方案,也许对某人有用。
基本上我将.htaccess移动到根服务器(而不是/ app / public目录)并更改了RewriteRule,如下所示:
RewriteEngine on
RewriteBase /app/public/
#RewriteCond %{REQUEST_FILENAME} !-d
RewriteCond %{REQUEST_FILENAME} !-f
RewriteRule ^(.*)$ index.php?url=$1 [PT]
现在它正在工作(至少在localhost上)。
你怎么看?这个配置有副作用吗?