【问题标题】:htaccess RewriteEnginehtaccess 重写引擎
【发布时间】:2011-09-12 13:51:00
【问题描述】:

我有一个网址是http://www.urlbookmarking.com/bookmarks-details.php?bid=55 我希望它像 http://www.urlbookmarking.com/bookmark/55

我在我的 htaccess 中写道:

RewriteEngine on
RewriteRule /bid/(.*) bookmarks-details.php?bid=$1

但是当我转到第一个 URL 时,重写引擎不会应用我的规则。是否有任何错误或冲突?

我的完整htaccess文件写如下

Options +FollowSymLinks

RewriteEngine on
RewriteCond %{REQUEST_FILENAME} !-f
RewriteRule ^([^\.]+)$ $1.php [NC,L] 

RewriteEngine on
RewriteCond %{HTTP_HOST} ^urlbookmarking.com [NC]
RewriteRule ^(.*)$ http://www.urlbookmarking.com/$1 [L,R=301]

RewriteEngine on
RewriteRule /bid/(.*) bookmarks-details.php?bid=$1

请帮帮我。

【问题讨论】:

  • 您没有添加重写的部分。或者更确切地说,你把它弄反了。
  • 图书ID是有字母还是全是数字。最大位数是多少?

标签: php .htaccess


【解决方案1】:

如果已经在 httpd.conf

中配置,Options +FollowSymLinks 行是可选的
Options +FollowSymLinks

RewriteEngine on

RewriteCond %{HTTP_HOST} ^urlbookmarking\.com [NC]
RewriteRule ^(.*)$ http://www.urlbookmarking.com/$1 [R=301, L]

RewriteRule ^bookmark/([0-9]+)$ bookmarks-details.php?bid=$1 [NC, L]

RewriteCond %{REQUEST_FILENAME} !-f
RewriteRule ^([^\.]+)$ $1.php [NC,L]

【讨论】:

    【解决方案2】:

    一些事情:

    1. RewriteEngine On 只需要调用一次,虽然这可能不会导致任何问题
    2. 我的RewriteEngine On 行后面也有RewriteBase /
    3. 我的重写规则是这样的:RewriteRule ^common/(.*)$ common.php?file=$1 [QSA,L],它告诉我你的规则应该是这样的RewriteRule ^bookmark/(.*) bookmarks-details.php?bid=$1 [QSA,L]

    【讨论】:

      【解决方案3】:
      1. 你应该只使用一个RewriteEngine on
      2. RewriteRule /bid/(.*) bookmarks-details.php?bid=$1 - 将此行放在Options +FollowSymLinks 之后
      3. 再试一次

      【讨论】:

        【解决方案4】:

        你希望你的网址是/bid/55 还是/bookmark/55?因为你写的好像是/bid/55...

        无论如何,您的 .htaccess 应该看起来更像这样:

        Options +FollowSymLinks
        
        RewriteEngine on
        
        RewriteCond %{HTTP_HOST} ^urlbookmarking.com [NC]
        RewriteRule ^(.*)$ http://www.urlbookmarking.com/$1 [L,R=301]
        
        RewriteRule ^bid/(.*)$ bookmarks-details.php?bid=$1 [L]
        
        RewriteCond %{REQUEST_FILENAME} !-f
        RewriteRule ^([^\.]+)$ $1.php [NC,L] 
        

        ...没有多个RewriteEngine on 指令(这些指令不会破坏任何东西,但不是必需的),并且bid 重写规则上没有前导斜杠。此外,将您的新规则放在为不存在的文件重写的规则之前,这样它就不会在您有机会使用它之前重写您的 URL,并在规则中添加一个 [L] 标志,这样它就不会进一步由其他规则修改。此外,将行开始/结束标记 (^/$) 添加到规则中。

        如果您将规则放在 httpd.conf 中,您将只使用前导斜杠,而不是在 .htaccess 文件中使用它们。

        如果您希望您的网址为/bookmark/,只需将bid 替换为bookmark

        【讨论】:

          【解决方案5】:

          这应该将所有带有书签 ID(只有数字)的“/bookmarks-details.php\?bid=(id)”网址重定向到 /bookmark/(id)。

          RewriteRule ^/bookmarks-details\.php\?bid=([0-9]+) /bookmark/$1 [R, NC, L]
          

          一旦你成功重写了 URL,你就需要编写一个伴随规则来处理它,如下所示:

          RewriteRule ^/bookmark/([0-9]+) /bookmarks-details\.php\?bid=$1 [NC, L]
          

          If 应该介于总是在开头添加“www”的规则和我放在末尾的 catch all 规则之间。总而言之,它可能看起来像这样:

          Options +FollowSymLinks
          RewriteEngine on
          
          RewriteCond %{HTTP_HOST} ^urlbookmarking.com [NC]
          RewriteRule ^(.*)$ http://www.urlbookmarking.com/$1 [L,R=301]
          
          RewriteRule ^/bookmarks-details\.php\?bid=([0-9]+) /bookmark/$1 [R, NC, L]
          RewriteRule ^/bookmark/([0-9]+) /bookmarks-details\.php\?bid=$1 [NC, L]
          
          RewriteCond %{REQUEST_FILENAME} !-f
          RewriteRule ^([^\.]+)$ $1.php [NC,L]
          

          这个链接可能会让事情更清楚:http://corz.org/serv/tricks/htaccess2.php

          【讨论】:

            猜你喜欢
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 2015-07-21
            • 2014-02-15
            • 1970-01-01
            • 1970-01-01
            • 2013-04-20
            • 2015-03-28
            相关资源
            最近更新 更多