我有一个显示新闻内容的网页。页面的URL看起来像
example.com/news.php?newsid=iphone4-releases
。我希望通过以下网址访问该网页: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,但我希望保留不带GET变量的相同URL。此外,使用此方法,网址变为example.com/iphone4-releases
,但我想要example.com/news/iphone4-releases
答案 0 :(得分:1)
这样做,假设您只在文章名称中使用a-Z,数字和短划线:
RewriteEngine On
RewriteCond %{REQUEST_FILENAME} !-d
RewriteCond %{REQUEST_FILENAME} !-f
RewriteRule ^news/([a-zA-Z0-9\-]*)$ /news.php?newsid=$1 [NC]
修改强>
此链接说明了参数: http://httpd.apache.org/docs/2.2/mod/mod_rewrite.html#rewritecond
关于-l:
' - l'(是符号链接)将TestString视为路径名并进行测试 它是否存在,是一种象征性的联系。
数字将在此示例中有效(例如/ news / iphone2003-new-launch)
对不起,但我很着急:)
答案 1 :(得分:1)
您不能指望省略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");
答案 2 :(得分:0)
也许您需要同时删除[OR]
,因为您希望所请求的文件不是文件而不是目录而不是符号链接
RewriteCond %(REQUEST_FILENAME) !-d
RewriteCond %(REQUEST_FILENAME) !-f
RewriteCond %(REQUEST_FILENAME) !-l
RewriteRule ^/(\w+)/(.*?)/?$ $1.php?newsid=$2 [NC,L]
并且您不需要整个域都在您的规则中