2015-02-06 57 views
0

嗨,我正在做一个网站,我希望友好和干净的链接。我试图使一个get参数看起来更清洁的链接。这里的链接是如何在目前的样本链接:从URL中删除index.php和参数名称

http://www.example.com/index.php?item=cd-player 

这里是我想要的链接查看:

http://www.example.com/cd-player 

我已经能够摆脱掉的index.php url只留下参数,但我需要帮助摆脱“?item”位。

这里是我到目前为止已经试过:

RewriteRule ^index\.php(.*)$ /$1 [R,L,QSA] 
RewriteRule ^(.+?)/?$ /?item=$1 [L,QSA] 

而且,这可能是一个PHP代码,而不是用于.htaccess文件代码,但如果用户输入http://www.example.com/cd-player,怎么会知道“cd-player”是一个名为“item”的get变量的值?

编辑:我与下面的答案遇到的问题是,我使用下面的代码删除文件扩展名,并在下面的答案代码把文件作为查询:

RewriteRule ^([^\.]+)$ $1.php [NC,L] 

回答

0

您需要像这样做。这将让你有干净的链接

RewriteEngine On 

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

#This means if its not a real file 
RewriteCond %{REQUEST_FILENAME} !-f 
#This means if its not a real directory 
RewriteCond %{REQUEST_FILENAME} !-d 
#Then take the capture and rewrite it 
RewriteRule ^(.+)$ /index.php?item=$1 [L] 
+0

你可以,如果你想删除的PHP添加此延期。 – 2015-02-06 16:23:43

0

试试这个:

RewriteCond %{REQUEST_FILENAME} !-f 
RewriteCond %{REQUEST_FILENAME} !-d 
RewriteRule ^(.*)$ /index.php?item=$1 [L] 
0

您需要2条规则实际上是:

RewriteEngine On 

# external redirect from actual URL to pretty one 
RewriteCond %{THE_REQUEST} /index\.php\?item=([^\s&]+) [NC] 
RewriteRule^/%1? [R=302,L,NE] 

# add .php extension 
RewriteCond %{REQUEST_FILENAME} !-d 
RewriteCond %{DOCUMENT_ROOT}%{REQUEST_URI}\.php -f [NC] 
RewriteRule ^(.+?)/?$ /$1.php [L] 

# internal forward from pretty URL to actual one 
RewriteCond %{REQUEST_FILENAME} !-f 
RewriteCond %{REQUEST_FILENAME} !-d 
RewriteRule ^(.+)$ /index.php?item=$1 [L,QSA] 
+0

我的问题是,现在正在将同一文件夹中的其他文件视为查询,因为我已从所有文件中删除文件扩展名,请参阅编辑 – Matt9Atkins 2015-02-06 16:15:53

+0

您需要比'RewriteRule ^([^ \。] +)$ $ 1更强的规则。 php [NC,L]'添加'.php'扩展名(请参阅编辑) – anubhava 2015-02-06 16:19:09