htaccess RewriteEngine

时间:2011-09-12 13:51:01

标签: php .htaccess

我有一个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

请帮帮我。

5 个答案:

答案 0 :(得分:2)

如果已在 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]

答案 1 :(得分:1)

一些事情:

  1. RewriteEngine On只需要调用一次,但这可能不会导致任何问题
  2. 我的RewriteBase /
  3. 之后我还有RewriteEngine On
  4. 我的重写规则如下所示:RewriteRule ^common/(.*)$ common.php?file=$1 [QSA,L],告诉我您的规则应该像这样RewriteRule ^bookmark/(.*) bookmarks-details.php?bid=$1 [QSA,L]

答案 2 :(得分:0)

  1. 您应该只使用一个RewriteEngine on
  2. RewriteRule /bid/(.*) bookmarks-details.php?bid=$1 - 将此行放在Options +FollowSymLinks
  3. 之后
  4. 再试一次

答案 3 :(得分:0)

您希望自己的网址是/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

答案 4 :(得分:0)

这应该将所有带有书签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]

如果应该在始终将'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