我有一个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
请帮帮我。
答案 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)
一些事情:
RewriteEngine On
只需要调用一次,但这可能不会导致任何问题RewriteBase /
行RewriteEngine On
RewriteRule ^common/(.*)$ common.php?file=$1 [QSA,L]
,告诉我您的规则应该像这样RewriteRule ^bookmark/(.*) bookmarks-details.php?bid=$1 [QSA,L]
答案 2 :(得分:0)
RewriteEngine on
RewriteRule /bid/(.*) bookmarks-details.php?bid=$1
- 将此行放在Options +FollowSymLinks
答案 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