0

这是我的情况

我对正则表达式不好,我避免它就像它是一种疾病我已经在谷歌上浏览了所有结果,现在我正在搜索“如何自杀并快速死亡”请我真的需要你的帮助我需要删除扩展名并且查询字符串被重写

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

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

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

www.example.com/story/4849AAS84

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

 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]
4

1 回答 1

1

为了.htaccess

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

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

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

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

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

现在,在 PHP 中,您应该可以pcord使用$_GET['pcord'].

的最终代码.htaccess是这样的:

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]
于 2013-06-20T22:37:17.753 回答