首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >云7 php url重写,用htaccess尝试过每一件事,我还没有尝试过自杀。

云7 php url重写,用htaccess尝试过每一件事,我还没有尝试过自杀。
EN

Stack Overflow用户
提问于 2013-06-21 06:15:55
回答 1查看 66关注 0票数 0

这是我的箱子

我不是在任何好的正则表达式,我避免它,因为它是一种疾病,我已经通过谷歌的每一个结果,现在我搜索“如何自杀和死亡迅速”请我真的需要你的帮助,我需要一个扩展删除和查询字符串重写

这样www.example.com/story.php?pcord=$1 ->will看起来就像www.example.com/story/%1

请当我的意思是%1时,我不希望pcord重新出现在url上

例如,我想让www.example.com/story.php?pcord=4849AAS84看起来像这样

www.example.com/story/4849AAS84

下面是我尝试使用的代码,但根本不起作用,只删除了扩展名

代码语言:javascript
复制
 Options +FollowSymLinks -MultiViews
 Turn mod_rewrite on
 RewriteEngine On
 RewriteBase /


 ## hide .php extension snippet


 # To externally redirect /dir/foo.php to /dir/foo
 RewriteCond %{THE_REQUEST} ^[A-Z]{3,}\s([^.]+)\.php [NC]
 RewriteRule ^ %1 [R,L]

 # To internally forward /dir/foo to /dir/foo.php
 RewriteCond %{REQUEST_FILENAME} !-d
 RewriteCond %{DOCUMENT_ROOT}/$1.php -f
 RewriteRule ^(.*?)/?$ $1.php [L]
EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2013-06-21 06:37:18

适用于 .htaccess

在这里,我们捕获查询字符串中的值作为%1,然后将以story.php开头的相对url重写到名为story的文件夹,后跟捕获的字符串。然后,我们将?添加到新指令的末尾,以停止mod_rewrite的默认性质,即在不创建新查询字符串的字符串上执行[QSA] (查询字符串追加)。要使其永久重写,请添加[R]标志:

代码语言:javascript
复制
#External Redirect
RewriteCond %{QUERY_STRING} pcord=([A-Za-z0-9]+) 
RewriteRule ^story.php story/%1? [R=301,L]

如果您需要将var神奇地发送回原始字符串,那么您需要以相反的方式捕获它。注意:在这里您不会使用R标志,因为它会告诉浏览器重定向。

代码语言:javascript
复制
#Internal Forward
RewriteRule ^story/([A-Za-z0-9]+) story.php?pcord=$1 [L]

记住,如果您已经尝试过使用[R=301]指令,那么它很可能缓存在您的浏览器中。

现在,在PHP中,您应该能够使用$_GET['pcord']访问pcord

.htaccess的最终代码如下:

代码语言:javascript
复制
RewriteEngine On
RewriteBase /

#External Redirect
RewriteCond %{QUERY_STRING} pcord=([A-Za-z0-9]+) 
RewriteRule ^story.php story/%1? [R=301,L]

#Internal Forward
RewriteRule ^story/([A-Za-z0-9]+) story.php?pcord=$1 [L]

RewriteCond %{REQUEST_FILENAME} !^story
RewriteCond %{REQUEST_FILENAME} \.php$
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
#Create the External Redirect for all existing .php files that are not story.php
RewriteRule ^([^/]+)\.php$ $1/ [R=301,L]

#Create the internal forward that maps them back in hiding
RewriteCond %{REQUEST_FILENAME} ^([A-Za-z0-9]+)/?$    
RewriteCond %{REQUEST_FILENAME} !-d
RewriteCond %1\.php -f
RewriteRule ^([^/]+)/?$ $1.php [L]
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/17224786

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档