htaccess重写引擎


htaccess RewriteEngine

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

请帮帮我。

如果已经在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. RewriteEngine On只需要调用一次,尽管这可能不会引起任何问题
  2. 我的RewriteEngine On行之后还有RewriteBase /
  3. 我的重写规则是这样的:RewriteRule ^common/(.*)$ common.php?file=$1 [QSA,L],这告诉我您的规则应该是这样的RewriteRule ^bookmark/(.*) bookmarks-details.php?bid=$1 [QSA,L]
  1. 您应该只使用一个RewriteEngine on
  2. RewriteRule /bid/(.*) bookmarks-details.php?bid=$1-将此行放在Options +FollowSymLinks之后
  3. 请重试

您希望url是/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文件中使用它们。

如果您希望您的url为/bookmark/,只需将bid替换为bookmark即可。

这应该重定向所有'/bookmarks details.php?bid=(id(的带有书签id(只有数字(的url到/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