我想输入.htaccess文件的代码,当输入时: domain.com/event/granniesteaparty文件夹'event'(display.php)中的文件采用'granniesteaparty'位,就像输入了domain.com/event/display.php?search=granniesteaparty一样。
如果尝试了各种各样的事情,但这就是我现在所处的位置:
RewriteEngine on
RewriteRule ^event/([A-Za-z0-9]+)/([0-9]+)/?$ /event/display.php?search=$1 [NC,L]
RewriteCond %{QUERY_STRING} s=([^&]+)
RewriteRule ^event /event/1? [NC,R=301]
我希望这是有道理的,有人能指出我正确的方向吗?
答案 0 :(得分:3)
您的第一条规则中有太多捕获组。试一试
RewriteEngine on
RewriteCond %{REQUEST_FILENAME} -f [OR]
RewriteCond %{REQUEST_FILENAME} -d
RewriteRule ^ - [L]
RewriteCond %{THE_REQUEST} ^GET\ /+event/display\.php\?search=([^&\s]+)
RewriteRule ^ /event/%1? [R=301,L]
RewriteRule ^event/(\w+)/?$ /event/display.php?search=$1 [NC,L]
答案 1 :(得分:1)
将以下代码.htaccess
放在事件目录中:
RewriteEngine on
RewriteBase /
RewriteCond %{REQUEST_FILENAME} !-d
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{THE_REQUEST} !\s/+event/display.php?search= [NC]
RewriteRule ^(.*)$ event/display.php?search=$1 [R=302,L,NE]
RewriteRule ^event/display.php?search=$1(.*)$ /$1 [L,NC]
更新
如果您只想将任何错误的页面重定向到显示页面而是在内部,那么以下代码将执行此操作:
RewriteEngine on
RewriteBase /
RewriteCond %{REQUEST_FILENAME} !-d
RewriteCond %{REQUEST_FILENAME} !-f
RewriteRule ^(.*) event/display.php [L,NC]
因此,当有人请求/event/whateverwrong
时,它会在url
处,但在内部会映射到display.php