从URL中删除index.php和参数名称

时间:2015-02-06 16:05:26

标签: php apache .htaccess

您好,我正在建立一个网站,我想要干净整洁的链接。我正在尝试使用get参数进行链接,看起来很清晰。以下是链接目前的示例链接:

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

以下是我希望链接显示的方式:

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

我已经能够从url中删除index.php而只留下参数但是我需要帮助来摆脱"?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]

3 个答案:

答案 0 :(得分: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]

答案 1 :(得分:0)

请改为尝试:

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

答案 2 :(得分: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]