.htaccess用一个漂亮的网址搜索事件

时间:2016-05-06 18:07:53

标签: php .htaccess search

我想输入.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]

我希望这是有道理的,有人能指出我正确的方向吗?

2 个答案:

答案 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