使用在 WAMP 本地主机和远程文件夹上工作的相同代码执行 URL 重写和重定向 (.htaccess)?

Doing URL Rewriting and Redirections (.htaccess) with same code working both on WAMP localhost and remote folder?

首先,我很抱歉关于这种问题的第无数个话题。 几个月来,我一直试图让其他主题适应我的问题,但一直不知道该怎么做。这就是我今天写作的原因,它真的困扰着我,截至今天,我只能成功地在远程上进行 URL 重写,但总是在生产远程文件夹中编码并不是可靠的解决方案。


这是我的文件树的样子:


首先,我想从这个 'template1' 项目的根目录重定向到 'public' 子文件夹的根目录;其次,我想重写 URLs 这样的 URL :
template1/index.php?route=qwertyuiop
变成那个:
template1/qwertyuiop

我想要的这些东西都可以工作,但只能在我在 Ionos 上的远程文件夹上工作,而且我不得不做一些奇怪的事情。例如,对于重定向,我直接将域链接到子文件夹,对于 URL 重写,我这样做:
RewriteEngine On
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_URI} !(\.png|\.jpg|\.gif|\.jpeg|\.zip|\.pdf|\.css|\.svg|\.js)$
RewriteRule ^(.*)$ /index.php?route= [L,QSA]


无论如何,这在远程文件夹上工作正常,当我执行 PHP header("location:/azertyuiop") 时它工作正常但在 localhost 中它尝试在 WAMPserver 的根目录下搜索,我不知道如何继续修复它,同时为本地和远程保留相同的代码。


如果你们中的任何人可以帮助我弄清楚如何处理这个问题,我将不胜感激,因为阅读主题并将我能做的任何东西放在我的 .htaccess 中都不能在本地主机上工作。

好的,非常感谢@MrWhite 基本上告诉了我有关 VirtualHost 的信息。我从未在任何主题中看到它,所以我可能在错误的方向上搜索。 现在一切正常。所以如果将来有人通过它,我会解释我做了什么让它在本地主机上工作。我要讲的内容是从我用我的母语 ( How to configure VirtualHost (French) ) 找到的网站翻译的。

第 1 步:在 Wamp 中编辑 Apache 的配置

在位于 'C:/wamp64/bin/apache/apache2.4.46/conf/extra/httpd-vhosts.conf' 的 'httpd-vhosts.conf' 文件中(在我的例子中),我必须添加这些虚拟主机行:

<VirtualHost *:80>
ServerAdmin webmaster@dummy-host.localhost
DocumentRoot "${INSTALL_DIR}/www/projets/projets_persos/tests/template1/public"
ServerName template1.local
ServerAlias template1.local
ErrorLog "logs/template1.local-error.log"
CustomLog "logs/template1.local-access.log" common
</VirtualHost>

然后我不得不修改位于 'C:/wamp/bin/apache/apache2.4.46/conf/httpd.conf' 中的名为 'httpd.conf' 的 Apache 主配置文件(在我的例子中)并取消注释以下行:

#Include conf/extra/httpd-vhosts.conf(在我的例子中,它已经被取消注释了)

在那之后,该网站说要在第 2 步之前重启 Wamp 的服务,我在下面的第 2 步之后就这样做了,它仍然可以正常工作。所以无论如何,我想这对你来说是一样的,现在或在第 2 步之后进行。

第 2 步:编辑 Windows' 主机文件

在位于 'C:/Windows/System32/drivers/etc/hosts' 的 'hosts' 文件底部,我在文件底部添加了以下行以覆盖之前的规则:

127.0.0.1 template1.local

啊啊,就这些了。

=-=-=-=-=

作为它运行良好的证明,这是我的项目的屏幕截图:


在这里你可以在图片上看到我在一个数组中分解了我的路线。我这样做是出于个人目的,以便能够根据我想要的任何字符串进行路由。如果您想去掉路由中的 'public' 值,只需在将其每个字段放入数组之前键入 $_GET['route'] = str_replace('public/', '', $_GET['route']); 即可。然后,它看起来像这样:



另外,当然,我使用 .htaccess 来进行 URL 重写,这是我的 .htaccess 文件:

RewriteEngine On
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_URI} !(\.png|\.jpg|\.gif|\.jpeg|\.zip|\.pdf|\.css|\.svg|\.js)$
RewriteRule ^(.*)$ /index.php?route= [L,QSA]

这有点偏离主题,但如果您需要知道,RewriteCond 行允许输入具有这些扩展的真实 URL 资产,并且不会重写,因为它们是真实的 URL秒。

=-=-=-=-=

无论如何,这是我解决方案的结束,再次感谢您帮助我,一切顺利。结束。