【问题标题】:static URL Rewriting the subdir静态 URL 重写子目录
【发布时间】:2013-10-13 18:24:58
【问题描述】:

我已经搜索过了,但我从来没有找到我要问的这个,所以我想知道它是否有可能......或者不可能......

  • 我正在使用 IP.Downloads 应用程序在 IPB.Board 3.4.5 中对此进行测试。

  • 我的网站中有这个静态网址,用户可以访问以下载一个文件:

    mysite.com/文件/文件/2-filename.txt

  • 原来的动态url是这样的:

    .../?app=downloads&showfile=2

  • 网址的更改是由该应用程序(IP.Downloads)进行的...

    • 我想把它改成 url:

      mysite.com/文本/2-filename.txt

  • 所以当用户在浏览器中插入时

    1 mysite.com/text/2-filename.txt

    • 他们看到了文件

    2 mysite.com/files/file/2-filename.txt

    • 它们被重写为 mysite.com/text/2-filename.txt
      • 并查看文件。
我怎样才能做到这一点?从 ( /files/file/ ) 更改为 ( /text/ ) ... 可以通过 .htaccess 制作还是我必须更改应用程序文件?还是不可能?

::更新::

我做到了!如果没有 .htaccess ,我会更改重写 url 的核心文件...

请参阅下面的答案...


感谢您的帮助。

【问题讨论】:

  • 不应该将mysite.com/files/file/1-name.txt 重定向到mysite.com/text/1-name.txt 吗?更新中的/1-test/ 是错字吗?

标签: php apache .htaccess ipb


【解决方案1】:

将此添加到您的网络根/ 目录中的.htaccess

RewriteEngine on
RewriteBase /

RewriteCond %{THE_REQUEST} ^[A-Z]{3,}\s/+files/file/([^?\s]+) [NC]
RewriteRule ^ /text/%1 [R=301,L]

RewriteCond %{THE_REQUEST} ^[A-Z]{3,}\s/+text/ [NC]
RewriteRule ^ /files/file/%1

【讨论】:

  • 感谢您的回答,但这不起作用...我尝试将其放在我的 .htaccess 文件中,但 url 不断出现“/files/file/”而不是“/text/ “我认为是因为系统本身使用 .htacess 进行重写 soo 不起作用...... PS:我什至设置删除我的“index.php”重写来测试你的代码,但它没有做出改变......跨度>
  • 现在直接使用/text/.. 对你有用吗?我得到它。您还需要现有的 /files/file/.. 网址才能显示为 /text/..。对吗?
  • ...更新之前...嗯..我忘了说,我会更新我的问题,我需要现有的 /file/file/.. url 显示为 /text/在用户浏览器中......我现在测试了,如果我输入:“mysite.com/text/2-filename”页面在“mysite.com/text/2-filename”中重复并返回404错误......我将检查更新并提供反馈......
  • 它仍然没有进行重写......仅当我在您的代码中插入“mysite.com/text/2-filename”时,浏览器应该显示“mysite.com/text/2-filename”或“mysite.com/files/file/2-filename”?因为在我的浏览器中它仍然是mysite.com/text/2-filename
  • 啊,伙计,我有点糊涂了。在您的第一条评论中,您说but the url keep coming with the "/files/file/" instead the "/text/",所以我现在保留了/text;而在内部,服务器会将其解析为/files/file。这不是你想要的吗?
【解决方案2】:

我是通过更改核心文件来实现的……对我来说更简单,所以我使用这种方式。 感谢@ravi-thapliyal 尝试通过 .htaccess 帮助制作此内容,但我更喜欢这种方式...

首先打开这个文件:

{forum-root}/admin/applications_addon/ips/downloads/extensions

  1. 在 $_SEOTEMPLATES = 数组中编辑此代码 ['idmshowfile']

    • 这将告诉服务器,当用户访问 (myserver.com/text/) 时,他们希望查看文件...

    • 'idmshowfile' => 数组(

         'app'          => 'downloads',
      
         'allowRedirect' => 1,
      
         'out'          => array( '/app=downloads(&|&)showfile=(.+?)(&|$)/i', 'text/$2-#{__title__}/$3' ),
      
         'in'           => array( 
      
             'regex'        => "#/text/(\d+?)-#i",
      
             'matches'  => array( 
      
                 array( 'app'       , 'downloads' ),
      
                 array( 'showfile'  , '$1' ))
      
                 ) 
      
         ),
      
  2. 并将此代码添加到 $_SEOTEMPLATES = 数组中的任意位置...

    • 这将告诉服务器,如果用户访问 (myserver.com/files/file/),他们将重写 url (myserver.com/text/) 并查看文件。

    • 'idmshowfile2' => 数组(

         'app'          => 'downloads',
      
         'allowRedirect' => 1,
      
         'out'          => array( '/app=downloads(&|&)showfile=(.+?)(&|$)/i', 'text/$2-#{__title__}/$3' ),
      
         'in'           => array( 
      
             'regex'        => "#/files/file/(\d+?)-#i",
      
             'matches'  => array( 
      
                 array( 'app'       , 'downloads' ),
      
                 array( 'showfile'  , '$1' ))
      
                 ) 
      
         ),
      

您可以在论坛中添加任意数量的重写,并创建漂亮友好的 SEO URL。

当然我知道这个文件可以在应用程序的未来更新中被覆盖,所以我会做备份,如果 possibel 创建一个钩子或应用程序来做这个(......如果可能的话)。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-02-06
    • 2010-10-26
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多