Php 通过替换GET变量缩短URL
我有一个显示新闻内容的网页。页面的URL看起来像Php 通过替换GET变量缩短URL,php,.htaccess,Php,.htaccess,我有一个显示新闻内容的网页。页面的URL看起来像 example.com/news.php?newsid=iphone4发行版。我希望可以通过如下URL访问该页面:example.com/news/iphone4 releases 我在.htaccess文件中进行了这些更改 RewriteCond %(REQUEST_FILENAME) !-d [OR] RewriteCond %(REQUEST_FILENAME) !-f [OR] RewriteCond %(REQUEST_FILENAME
example.com/news.php?newsid=iphone4发行版
。我希望可以通过如下URL访问该页面:example.com/news/iphone4 releases
我在.htaccess
文件中进行了这些更改
RewriteCond %(REQUEST_FILENAME) !-d [OR]
RewriteCond %(REQUEST_FILENAME) !-f [OR]
RewriteCond %(REQUEST_FILENAME) !-l
RewriteRule .* - [L]
RewriteRule ^(.*)$ http://example.com/news.php?newsid=$1 [NC]
这段代码实际上替换了URL,但我想保留相同的URL,而不使用GET变量。此外,使用此方法,URL将变为
example.com/iphone4 releases
,但我希望example.com/news/iphone4 releases
可能您需要同时删除[或]
,因为您希望请求的文件不是文件,也不是目录,也不是符号链接
RewriteCond %(REQUEST_FILENAME) !-d
RewriteCond %(REQUEST_FILENAME) !-f
RewriteCond %(REQUEST_FILENAME) !-l
RewriteRule ^/(\w+)/(.*?)/?$ $1.php?newsid=$2 [NC,L]
而且您不需要整个域都在您的规则中假设您的文章名中只使用a-Z、数字和破折号,那么就可以了:
RewriteEngine On
RewriteCond %{REQUEST_FILENAME} !-d
RewriteCond %{REQUEST_FILENAME} !-f
RewriteRule ^news/([a-zA-Z0-9\-]*)$ /news.php?newsid=$1 [NC]
编辑:
此链接介绍有关参数的信息:
关于-l:
“-l”(是符号链接)将TestString视为路径名并进行测试
它是否存在,并且是一个符号链接
在本例中,数字将起作用(例如/新闻/iphone2003新发布)
很抱歉,但我很匆忙:)您不能期望忽略GET变量并使用.htaccess执行303重定向,因为重定向将丢失您的变量。您可以做的是将带有POST的表单提交到您将重定向到的页面,并创建从该页面到真实PHP脚本的符号链接,然后创建重写规则以重定向客户端浏览器 这是您的上述重定向,包括添加的
/news/
部分:
RewriteEngine On
RewriteBase /
RewriteCond %(REQUEST_FILENAME) !-d [OR]
RewriteCond %(REQUEST_FILENAME) !-f [OR]
RewriteCond %(REQUEST_FILENAME) !-l
RewriteRule .* - [L]
RewriteRule ^(.*)$ news/news.php?newsid=$1 [NC]
您还可以仅使用PHP执行重定向:
header("Location: http://www.redirecthere.com");
我的newsid中也使用数字。你能解释一下你为什么要搬走吗-l来自重写条件(以及它的作用)