在.htaccess

时间:2017-03-30 09:22:17

标签: php apache .htaccess url-rewriting

我正在尝试为.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中使用了,我也会保留它。 谢谢!

2 个答案:

答案 0 :(得分:0)

这对我来说很好,希望它也适合你。

Check .htaccess here

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上)。

你怎么看?这个配置有副作用吗?