【问题标题】:.htaccess rewrite rule ,last query string is append to the url.htaccess 重写规则,最后一个查询字符串附加到 url
【发布时间】:2011-12-11 19:19:45
【问题描述】:

嗨,我创建了一个 cms 网站,我需要重写我的网址

当前我的网址是http://www.example.com/index.php?link=pages&cmsid=2&cmsLink=Carpet
它指的是 cmsLink
我想要我的网址,例如 http://www.example.com/Carpet
我正在使用以下代码

Options +FollowSymLinks
Options +Indexes
RewriteEngine on
RewriteBase /
RewriteRule ^index.php?link=(.*)&cmsid=(.*)&cmsLink=(.*) $3

【问题讨论】:

    标签: .htaccess content-management-system directoryindex


    【解决方案1】:

    尝试将您的最后一条规则更改为:

    RewriteRule ^(.+)$ /index.php?link=pages&cmsid=2&cmsLink=$1
    

    由于您希望拥有像http://www.example.com/Carpet 这样的网址,因此您的网址中的cmsid 和link 必须硬编码为2 和pages。

    【讨论】:

    • cmsid 和链接不是硬编码的,我试过像RewriteRule ^([^/]*)/([^/]*)/([^/]*)\$ /index.php?link=$1&cmsid=$2&cmsLink=$3 [L] 一样,它给了我像 example.com/pages/2/Carpet 这样的输出,但我想要像 example.com/Carpet 这样的网址
    • 如果你想要像 example.com/Carpet 这样的 url,那么 .htaccess 将如何知道值 2? .htaccess 从哪里获得值 2?或者像 example.com/Table 这样的 URL 的值 2 是否始终保持不变?
    • URL 重写使用来自传入用户请求的值并将其重定向到其他 URL。所以所有需要的值都应该是原始请求的一部分。因此,如果 2 不在您的原始请求中(即 example.com/Carpet),则您无法在重定向的 url 中传递 2(index.php?cmsid=2&cmsLink=Carpet)。
    • 是的,Aziz,你是对的,为什么我要更改我的 php 代码并传递唯一的 cmsLink 并从查询字符串中删除 cmsid,然后编写 .htaccess
    【解决方案2】:

    要获得此网址,使用 .htaccess 无法直接实现
    我也在 htacess 中使用正则表达式和其他内容

    我把cmsid去掉

    当前我的网址是http://www.example.com/index.php?link=pages&cmsLink=Carpet

    RewriteCond %{REQUEST_URI} !/admin
    RewriteCond %{REQUEST_URI} !^/(.*).php
    RewriteBase /
    RewriteRule ^([^/]+)/?$ index.php?link=pages&cmsLink=$1&%{QUERY_STRING} [L]
    

    它返回给我http://www.example.com/Carpet

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2014-09-27
      • 1970-01-01
      • 2011-04-18
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2019-10-31
      • 2021-08-24
      相关资源
      最近更新 更多