【问题标题】:htaccess with multi-parametershtaccess 多参数
【发布时间】:2016-09-15 16:44:26
【问题描述】:

我正在尝试像这样重定向我的链接:

我的 href = example.com/?p=users&page=2
我的网址应该是 = example.com/users/page/2

此时,我的 mod_rewrite 正在使用:

我的href = example.com/?p=users
我的网址 = example.com/users

这是我的 htaccess:

<IfModule mod_rewrite.c>
Options +FollowSymLinks
RewriteEngine On

RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteCond %{REQUEST_URI} !=/index.php
RewriteRule ^(.*)$ index.php?p=$1 [L,QSA]
</IfModule>

【问题讨论】:

  • 您应该做的第一件事是将您的href 更改为您想要的(规范)URL。否则(一旦实施),您最终会将 每个 请求重定向到规范 URL(对用户来说可能很慢,服务器访问量是两倍等)。
  • 我的 href 已经是规范的 (users/page/2) 但还没有工作

标签: apache .htaccess mod-rewrite


【解决方案1】:

拥有完整的 .htaccess:

Options +FollowSymLinks
RewriteEngine On

# skip all files and directories from rules below
RewriteCond %{REQUEST_FILENAME} -f [OR]
RewriteCond %{REQUEST_FILENAME} -d
RewriteRule ^ - [L]

# skip index.php from any rules below
RewriteRule ^index\.php$ - [L,NC]

# handle /users/page/2 URI
RewriteRule ^([\w-]+)/([\w-]+)/(\d+)/?$ index.php?p=$1&$2=$3 [L,QSA]

# handle /users URI
RewriteRule ^([\w-]+)/?$ index.php?p=$1 [L,QSA]

【讨论】:

  • 我不知道发生了什么,但是当我点击我的 href 时,我被重定向到正确的页面,但没有我的样式和其他内容...我的 href example.com/用户/页面/2
  • 要修复 css/js/images 路径,您可以将其添加到页面 HTML 的 &lt;head&gt; 部分下方:&lt;base href="/" /&gt;
  • 不!我已经在我的 htaccess 中尝试过 &lt;base href="/"&gt;RewriteBase /
  • 已解决。在我的索引中的&lt;link rel&gt;&lt;script&gt;,我在所有目录的开头添加了一个斜线!谢谢!
【解决方案2】:
RewriteRule ^(.*)$ index.php?p=$1 [L,QSA]

尝试将您的 RewriteRule 更改为:

RewriteRule ^(.+?)(?:/page/(\d*))?$ index.php?p=$1&page=$2 [L,QSA]

这种“一条规则”方法的一个小警告是,对example.com/users 的请求将被重写为index.php?p=users&amp;page=,即。一个空的page URL 参数。

(.+?) - 此子模式中的问号使正则表达式不贪婪,否则 可选 正则表达式的第二部分将始终被省略。

【讨论】:

  • 不工作,实际上......我想我会让它这样。这件事让我发疯了,谢谢。
  • 对不起,我错过了“页面”路径段!我已经更新了我的答案。 (它以前会处理 /users/2,而不是 /users/page/2 - 已更正。)
猜你喜欢
  • 2019-07-03
  • 1970-01-01
  • 1970-01-01
  • 2023-04-10
  • 1970-01-01
  • 2020-05-06
  • 1970-01-01
  • 2013-12-26
  • 1970-01-01
相关资源
最近更新 更多