【问题标题】:Apache mod_rewrite path to query string for specific path formatApache mod_rewrite 路径以查询特定路径格式的字符串
【发布时间】:2021-05-15 09:18:40
【问题描述】:

我已经为此工作了好几个星期。我希望能够使用友好的 URL 将变量传递给 PHP 脚本。例如,如果有人使用此 URL:

https://example.com/foo/bar/who

我希望我的 PHP 脚本能收到这个:

https://example.com/index.php/?var1=foo&var2=bar&var3=who

问题是我只想在路径中有三个变量时进行重写。如果少于或多于三个,我不想重写 URL。

我见过其他几种与这种类型的重写相关的解释,但都不是这样。

这几乎可以工作,但并不完全。如果前三个变量存在某些东西,我只希望完成重写。我知道这是不完整的,但使用这种方法,至少 REQUEST_URI 包含我可以解析的值。但同样,我只想在路径中有三个变量时这样做。

RewriteEngine on
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule !^index\.php/([^/]*)/([^/]*)/([^/]*)$ index.php [L]

谢谢。

【问题讨论】:

  • 请在您的问题中添加您尝试过的 htaccess 规则文件,谢谢。

标签: apache .htaccess mod-rewrite query-string friendly-url


【解决方案1】:

你已经很接近了,就这样吧。请确保在测试 URL 之前清除浏览器缓存。您已经创建了仅需要使用它们的反向引用,我现在已经添加了这些。

RewriteEngine on
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule ^([^/]*)/([^/]*)/([^/]*)$ index.php?var1=$1&var2=$2&var3=$3 [L]

【讨论】:

  • 谢谢 .. 这实际上修复了第一部分。只有当 URL 中有三个参数时,才能使此规则起作用。发生的情况是,这也会重写引用我的 CSS、JS 和其他文件的 URL。如果我只能在 URL 为 /a/b/c (三个项目)的形式时重写它,我认为这会解决它。或者,仅当请求不包含 .js .php 或 .css 文件时才运行规则。
  • @MichaelJ,您可能需要使用 base 标签来修复您的 js 和其他相关资源。如果您使用相对路径链接 js 文件,那么该文件显然会得到 404,因为它正在寻找 URL 路径。例如,如果 URL 路径是 /file/ 而不是 file.html,那么您的相关资源将从 /file/ 加载,这不是目录而是重写的 html 文件。要解决此问题,请使您的链接成为绝对链接或使用基本标签。在您的网页标题中添加此<base href="/">,以便您的相关链接可以从正确的位置加载。
  • 就是这样!我没有意识到我对一些 JS/CSS 文件使用了相对路径。感谢您的大力协助。
  • @MichaelJ,您的欢迎、欢呼和快乐的学习。
猜你喜欢
  • 2015-06-12
  • 2016-03-26
  • 1970-01-01
  • 1970-01-01
  • 2011-04-01
  • 1970-01-01
  • 2013-06-29
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多