2013-03-04 130 views
1

我正在尝试为SEO目的重写一个URL。使用.htaccess查询字符串重写

旧网址是:

http://www.domain.net/index.php?p=beer 

新的URL应该是:

http://www.domain.net/beer 

我在.htaccess代码是:

RewriteRule ^([^/\.]+)/?$ index.php?p=$1 

即使研究小时后,我不知道为什么这不起作用:(

这里是完整的.htaccess:

RewriteEngine on 
RewriteCond %{HTTP_USER_AGENT} Teoma 
RewriteRule ^.* - [F] 
rewritecond %{HTTP_HOST} !^www\.domain\.net$ [NC] 
rewriterule ^(.*)$ http://www\.domain\.net/$1 [R=301,L] 

RewriteCond %{QUERY_STRING} ^p=uppic$ 
RewriteRule ^index\.php$ /? [L,R=301] 

RewriteRule ^([^/\.]+)/?$ index.php?p=$1 

# Pwd service 

AuthType Basic 
AuthName "Service" 
AuthUserFile /xxxx/www/xxxxxx/xxxxx/xxxxxx/.htpasswd 


<Files admin.php> 
Require user xxxxxxx 
</Files> 

Options -Indexes 

在此先感谢!


我这个代码最后的问题是:

RewriteRule ^([^/\.]+)/?$ index.php?p=$1 

使得工作:

http://www.domain.net/beer 

和啤酒指的是页面:

http://www.domain.net/index.php?p=beer 

这是伟大的!但是,如果我把一个/后面的啤酒,例如:

http://www.domain.net/beer/ 

我beer.php文件运行在另一条路径,所以没有CSS,图片,JS等是包括在内。任何想法如何解决这个问题,而不需要更改html到http://www.domain.net/style.css ...?

回答

-1

你有没有试过这个:?

^([^/\.]+)\/?$ 

否则我会尝试.htacces没有其他的东西。

刚:

RewriteEngine On 
RewriteBase/
RewriteRule ^([^/\.]+)\/?$ index.php?p=$1 
+0

两者都不起作用。 – user2133694 2013-03-04 23:33:55

+0

这与所要求的相反。 – progammingaddict 2014-12-18 01:51:06

0

如果你想捕捉的查询字符串的一部分,你必须使用一个RewriteCondQUERY_STRING

RewriteEngine On 
RewriteCond %{QUERY_STRING} p=(.+) 
RewriteRule ^/?index.php$ /%1? [R,L] 

此客户端重定向到新的URL http://www.domain.net/beer

+0

好的,越来越近了。但是,这将我重定向到http://www.domain.net/beer?p=beer – user2133694 2013-03-05 01:51:31

+0

@ user2133694对不起,我忘了添加最后的问号。 – 2013-03-05 01:56:51

+0

这是工作,真棒!谢谢。您是否知道是否可以在浏览器中显示我们的www.domain.net/beer,并获取将由http://www.domain.net/index.php?p=beer打开的页面。因为现在,我得到了404. – user2133694 2013-03-05 02:03:05