使用 .htaccess 通过查询字符串将文件路径重写为文件名
P粉035600555
P粉035600555 2024-01-01 15:35:08
0
1
541

我在使用查询字符串重写文件路径时遇到问题

我正在尝试获取如下所示的网址:

https://url.com/products/1_Samsung_Galaxy

并像这样重写对我的服务器的请求:

https:url.com/model.php?id=1&title=Samsung_Galaxy

这是我的 htaccess 到目前为止的样子:

RewriteEngine On

#rewrite no ending files to .php if file doesn't exist
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !products/
RewriteRule ^([^.]+)$ .php [NC,L]

RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule ^/products/([1-9]+)(.*)$ model.php?id=&title= [NC,L]

使用当前配置,请求将发送到与 model.php 位于同一目录中的名为 products.php 的文件,但似乎位于不同的目录中,因为具有相对路径的 products.php 中引用的一些脚本文件会抛出异常它们包含的对象不存在的错误。

实际上,我的主要问题是我不知道 apache 语法或它是如何工作的,而且我很难找到可以了解 apache 的资源。由于某种原因,apache 文档没有太大帮助。如果有学习如何编写 apache 文件的好资源,我也很乐意查看。

P粉035600555
P粉035600555

全部回复(1)
P粉463824410

您的问题有点模糊,但我认为这就是您正在寻找的:

RewriteEngine On

# rewrite /products/ to /model.php/.....
RewriteRule ^/?products/(\d+)(.*)$ /model.php?id=&title= [L]

# rewrite to "...php" if such file exists
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME}.php -f
RewriteRule ^ %{REQUEST_URI}.php [L]

如果在 http 服务器的主机配置中实施,这些规则将起作用。或者,如果您无权访问该文件,则可以在位于 http 主机的 DOCUMENT_ROOT 文件夹中的分布式配置文件(“.htaccess”)中进行访问。

与您的尝试的主要区别:

  • 目标路径被写为绝对路径。这解决了请求被重写到不同文件夹的问题。
  • 首先实现对 /model.php 的异常重写,因此在文件的较高位置执行,因为规则是从上到下处理的。这节省了一些条件。

您还提到您“不熟悉 apache 语法”并且很难找到资源来学习它。

我总是推荐 apache 模块的官方文档。它们品质卓越,并提供了很好的示例:

https://httpd.apache.org/docs/current/mod /mod_rewrite.html

热门教程
更多>
最新下载
更多>
网站特效
网站源码
网站素材
前端模板
关于我们 免责声明 Sitemap
PHP中文网:公益在线PHP培训,帮助PHP学习者快速成长!