【问题标题】:Using two RewriteRule in .htaccess在 .htaccess 中使用两个 RewriteRule
【发布时间】:2019-05-06 00:03:16
【问题描述】:

我的 .htaccess 文件中有两个 RewriteRule,托管在 godaddy ?

RewriteEngine On 
RewriteCond %{SERVER_PORT} 80 
RewriteRule ^(.*)$ https://www.sosyosapien.com/$1 [R,L]
RewriteBase /
RewriteRule ^low/$ https://www.sosyosapien.com/index.php?postt=$1&konu=$2&kategori=$3 [QSA,NC,L]

编辑:为了更清楚,我的网址现在看起来像:

sosyosapien.com/index.php?postt=23&konu=what_is_sosyosapien&kategori=science

但我希望它看起来像

sosyosapien.com/index.php/23/what_is_sosyosapien/science

但是我的代码只做http到https的重定向,不能按照我想要的方式改变URL。对不起,我对.htaccess的工作原理没有足够的了解。你能给我一个代码来做我需要的吗?

【问题讨论】:

  • 在第二次重写中,您的组 $1-3 在左侧不匹配(仅低/模式)。如果您也需要重定向它,请在方括号中添加 R=301。

标签: .htaccess


【解决方案1】:

您很可能不想将此 RewriteRule 添加到您的.htaccess。这是不正确的,它缺少它所引用的捕获组:

RewriteBase /
RewriteRule ^low/$ https://www.sosyosapien.com/index.php?postt=$1&konu=$2&kategori=$3 [QSA,NC,L]

如果你真的必须保留这个,你可能会发现 $1$2$3 是你可能想要重定向的。然后,您可以在此基础上更改此^low/$


也许,只需添加这个,它可能会起作用:

<IfModule mod_rewrite.c>
    RewriteEngine On 
    RewriteCond %{HTTP_HOST} ^sosyosapien\.com [NC]
    RewriteCond %{SERVER_PORT} 80 
    RewriteRule ^(.*)$ https://www.sosyosapien.com/$1 [R,L]

RewriteCond %{QUERY_STRING} postt=(.*)
RewriteRule ^(.*)\/index\.php\?postt=([0-9]+)&konu=(\w+)&kategori=(\w+)$ ^$1\/$2\/$3\/$4$ [R,L,302]


</IfModule>

This RegEx 可能会帮助您根据需要简化表达式,因为我不确定您可能有哪些类型的条件:

^(.*)\/index\.php\?postt=([0-9]+)&konu=(\w+)&kategori=(\w+)$

图表

此图显示了 RegEx 的工作原理:

  • 你可能需要重启 apache:

       sudo apachectl restart
    
  • 您还想在每次更改 .htaccess 时清除浏览器缓存。

【讨论】:

  • 先生,不幸的是,它对我不起作用。它仍然只进行重定向并且不会更改 URL 结构。我将我的问题编辑得更清楚,请您检查一下...跨度>
猜你喜欢
  • 2021-12-08
  • 1970-01-01
  • 1970-01-01
  • 2017-02-03
  • 1970-01-01
  • 2015-02-24
  • 1970-01-01
  • 2011-10-21
  • 1970-01-01
相关资源
最近更新 更多