如何从此网址中删除 id 和 title? [复制]
Posted
技术标签:
【中文标题】如何从此网址中删除 id 和 title? [复制]【英文标题】:How to remove id and title from this url? [duplicate] 【发布时间】:2015-06-28 04:40:08 【问题描述】:我需要使用 .htaccess 文件从此网址中删除 ?id=
和 &title=
。
现在的网址 - http://www.XXXX.com/video.php?id=XX&title=XXX-XXX-XXX
我需要什么 - http://www.XXXX.com/video.php/XX/XXX-XXX-XXX
我已经从所有链接中删除了 .php。
【问题讨论】:
你尝试了什么? 使用 post 方法,认为你正在尝试使用 getRewriteRule ^video/([0-9]+)/([0-9a-zA-Z_-]+)$ video.php?id=$1&title=$2 [NC,L]
这不起作用..
【参考方案1】:
以下 htaccess 代码将完成您的工作
//First Parameer
RewriteEngine On
RewriteRule ^([a-zA-Z0-9_-]+)$ video.php?id=$1
RewriteRule ^([a-zA-Z0-9_-]+)/$ video.php?id=$1
//Second Parameter
RewriteEngine On
RewriteRule ^([a-zA-Z0-9_-]+)/([0-9]+)$ video.php?id=$1&title=$2
RewriteRule ^([a-zA-Z0-9_-]+)/([0-9]+)/$ video.php?id=$1&title=$2
【讨论】:
是的,这比我的版本要好得多。不错。 我不明白为什么这应该有效。 OP想要删除查询字符串。【参考方案2】:将以下代码添加到您的 .htaccess
文件中。
RewriteEngine on
RewriteBase /
RewriteCond %QUERY_STRING ^id=(.*)\&title=(.*)
RewriteRule (.*) /$1/%1/%2? [NC,L,R=301]
输出是
http://www.XXXX.com/video.php/XX/XXX-XXX-XXX
这段代码对我有用,我希望它对你有用。
【讨论】:
您的规则将匹配任何带有 id 和 title 参数的 url,而不仅仅是/video.php
@MarioA 嘿,我现在编辑我的代码,它不仅可以处理任何文件 video.php,谢谢【参考方案3】:
为了访问查询字符串,您需要使用这样的RewriteCond
语句:
RewriteEngine on
RewriteCond %QUERY_STRING id=([^&]+)&title=([^&]+)
RewriteRule ^video.php$ video.php/%1/%2 [L,R=301]
当 id 和 title 参数与您的示例完全一致时,上述示例有效。如果查询字符串中可以有其他参数,或者参数可以按任意顺序排列,则需要调整规则。
【讨论】:
为什么要这样?RewriteRule ^video.php$
matches 只是 /video.php
没有别的。
嘿伙计们,对不起,这是我的错误。感谢您指出这一点。【参考方案4】:
非常感谢您提供所有这些答案。Subodh Ghulaxe 已发布了一个很好的答案。
但这对我来说是有效的代码。
# To externally redirect /dir/foo.php?id=123&title=456 to /dir/123/456
RewriteCond %THE_REQUEST ^GET\s([^.]+)\.php\?id=([^&]+)&title=([^&\s]+) [NC]
RewriteRule ^ %1/%2/%3? [R,L]
# To externally redirect /dir/foo.php?id=123 to /dir/123
RewriteCond %THE_REQUEST ^GET\s([^.]+)\.php\?id=([^&\s]+)\s [NC]
RewriteRule ^ %1/%2? [R,L]
# To internally forward /dir/foo/12 to /dir/foo.php?id=12
RewriteCond %REQUEST_FILENAME !-d
RewriteCond %REQUEST_FILENAME.php -f
RewriteRule ^(.+?)/([^/]+)(/[^/]+)?/?$ $1.php?id=$2 [L,QSA]
RewriteRule ^([a-zA-Z0-9_-]+)/([0-9]+)$ video.php?id=$1&title=$2
RewriteRule ^([a-zA-Z0-9_-]+)/([0-9]+)/$ video.php?id=$1&title=$2
# To externally redirect /dir/foo.php to /dir/foo
RewriteCond %THE_REQUEST ^GET\s([^.]+)\.php\s [NC]
RewriteRule ^ %1 [R,L]
# To internally forward /dir/foo to /dir/foo.php
RewriteCond %REQUEST_FILENAME !-d
RewriteCond %REQUEST_FILENAME.php -f
RewriteCond %QUERY_STRING ^$
RewriteRule ^(.*?)/?$ $1.php [L]
Sumurai8 在here 中完成了这段代码(完整的.htaccess 代码)。我希望这段代码对某人有所帮助。对于 css、js、图像,请确保使用绝对路径。
【讨论】:
以上是关于如何从此网址中删除 id 和 title? [复制]的主要内容,如果未能解决你的问题,请参考以下文章