我一直在研究这个URL重写.htaccess代码,但有些人说我做错了或倒退了:
RewriteEngine On
RewriteCond %{THE_REQUEST} /index\.php\?(.*)p=(?!admin)(?!superadmin)((?![^&]*?edit)[^\s&]+) [NC]
RewriteCond %{THE_REQUEST} /index\.php\?(.*)p=([^&\ ]+)&?([^\ ]*) [NC]
RewriteRule ^ /%2?%1%3 [R=301,L]
RewriteCond %{REQUEST_FILENAME} !-d
RewriteCond %{REQUEST_FILENAME} !-f
RewriteRule ^([^/]+)/?$ index.php?p=$1 [L,QSA]
最终我希望用户不要看到查询字符串的链接,但我需要查询字符串仍然存在并且可以某种方式使用,以便我可以检查$ _GET变量的值。
换句话说,我需要这个: - domain.com/index.php?p=Home将被重写为domain.com/Home - domain.com/index.php?p=Bio将被重写为domain.com/Bio - 当用户点击主页上指向domain.com/index.php?p=Bio的链接时,他们应该在浏览器的网址栏中看到domain.com/Bio但我仍然能够回显$ _GET ['当我登陆Bio页面时,获得'Bio'。
有意义吗?
提前感谢您的帮助!
答案 0 :(得分:0)
小调整,它应该有用。
Options +FollowSymLinks -MultiViews
RewriteEngine On
RewriteBase /
RewriteCond %{THE_REQUEST} index\.php\?.*(?<!\w)p=(?![^&]*(?:admin|edit))([^\s&#]+) [NC]
RewriteCond %{REQUEST_FILENAME} !-d
RewriteCond %{REQUEST_FILENAME} !-f
RewriteRule ^([^/]+)/?$ index.php?p=%1 [L,QSA]