云7 PHP url重写,用htaccess尝试了每一件事,我没有试图自杀


cloud 7 php url rewriting, with htaccess have tried every single thing, i have not tried committing suicide

这是我的案例

无论如何我都不擅长regexp,我像避开疾病一样避开它我已经浏览了谷歌上的每一个结果,现在我正在搜索"如何自杀和快速死亡",我真的需要你的帮助我需要一个扩展删除和查询字符串重写

使得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]

For .htaccess

在这里,我们从查询字符串中捕获%1的值,然后我们重写一个以story.php开头的相对url到一个名为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中你应该可以用$_GET['pcord']访问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]