.htaccess将规则重写到路径而不更改URL

cqoc49vn  于 2022-11-16  发布在  其他
关注(0)|答案(3)|浏览(172)

所以我有个问题
1.基本网站位于http://example.com/
1.位于http://example.com/web2/的第二个网站
1.向第二个网站(如http://example.com/myWeb/pg1http://example.com/web2/pg2)发出各种请求的用户
最近,由于一些其他问题,我需要有一个自定义的第二个网站的新路径,但也保持第一个工作。
其想法是允许用户通过以下两个地址访问第二个网站:

  • http://example.com/web2/
  • http://example.com/alternative-url-web2/

文件夹/web2/实际上存在于服务器上,但是我如何模拟文件夹/alternative-url-web2/并将请求“重定向”到/web2/
请注意,我不希望浏览器上的URL改变,这必须是一个“沉默的重定向”。我也确保所有其他的请求,如http://example.com/other没有被重定向的第二个网站。

  • 谢谢-谢谢

更新

根据@anubhava,我可以简单地通过添加我的.htaccess来解决这个问题:

Options +FollowSymLinks -MultiViews
RewriteEngine On
RewriteBase /
RewriteRule ^alternative-url-web2(/.*|)$ /web2$1 [L,NC]

这可能工作正常,但我注意到以下问题:

  • http://ex.com/alternative-url-web2被重定向到http://ex.com/web2/(更改浏览器URL);
  • http://ex.com/alternative-url-web2/被重定向到http://ex.com/(更改浏览器URL);
  • http://ex.com/alternative-url-web2/someRequest工作正常,不会更改浏览器URL;
  • http://ex.com/alternative-url-web2/index.php工作正常,不会更改浏览器URL;
    站点注解:

/web2/处有一个.htaccess,* 可能 * 导致上述有线重定向行为...因此,以下是文件内容:

<IfModule mod_rewrite.c>
    RewriteEngine On
    RewriteCond %{REQUEST_FILENAME} -f [OR]
    RewriteCond %{REQUEST_FILENAME} -l [OR]
    RewriteCond %{REQUEST_FILENAME} -d
    RewriteRule ^.*$ - [NC,L]
    RewriteRule ^(data/|js/|styles/|install/|favicon\.ico|crossdomain\.xml|robots\.txt) - [NC,L]
    RewriteRule ^.*$ index.php [NC,L]
</IfModule>

是否是index.php的内部重写规则导致了这一切?如果是,我该如何修复它?

5jvtdoz2

5jvtdoz21#

通过httpd.conf启用mod_rewrite和.htaccess,然后将以下代码放在DOCUMENT_ROOT目录下的.htaccess中:

Options +FollowSymLinks -MultiViews
# Turn mod_rewrite on
RewriteEngine On
RewriteBase /

RewriteRule ^alternative-url-web2(/.*|)$ /web2$1 [L,NC]

替代代码:

RewriteRule ^alternative-url-web2/?$ /web2/ [L,NC]
RewriteRule ^alternative-url-web2/(.+)$ /web2/$1 [L,NC]
vecaoik1

vecaoik12#

这是一个非常简单的重写。在文档根目录下的htaccess文件中,只需添加以下内容:

RewriteEngine On
RewriteRule ^alternative-url-web2/?(.*)$ /web2/$1 [L]

与重定向不同,重定向使浏览器/客户端发送一个新的URL请求(从而改变浏览器位置栏中的内容),重写完全发生在服务器端。

qncylg1j

qncylg1j3#

顺便说一句,为了跟踪htaccess重定向的踪迹,你可以在每个重定向中添加如下内容:

Header add X-Remark-Rewrite "/path.to/htaccess"

您可以在开发人员工具的响应中检查这些内容。

相关问题