这是我的箱子
我不是在任何好的正则表达式,我避免它,因为它是一种疾病,我已经通过谷歌的每一个结果,现在我搜索“如何自杀和死亡迅速”请我真的需要你的帮助,我需要一个扩展删除和查询字符串重写
这样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
下面是我尝试使用的代码,但根本不起作用,只删除了扩展名
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]发布于 2013-06-21 06:37:18
适用于 .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]https://stackoverflow.com/questions/17224786
复制相似问题