.htaccess代码显示500内部错误

时间:2019-04-13 13:40:53

标签: php .htaccess

嗨,我正在尝试制作博客演示,并且已经有了一些漂亮的URL代码。

我有一个网址www.xyz.com

和搜索网址www.xyz.com/search/this+is+a+search+text

在搜索网址中,参数search是页面名称,而this+is+a+search+text是我将要解析的参数

我下面已经有一个.htaccess代码

# code to make pretty URLS | we're using this code to achieve /category/slug
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule ^/?(.+)/([\w-]+)/([\d]+)$ app/post.php?&category=$2&page=$3 [L,QSA]

RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule ^/?(.+)/([\w-]+)/([\w-]+)$ app/post.php?&category=$2&slug=$3 [L,QSA]

# code to make pretty URLS for search page
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule ^/?(.+)/([\w-]+)/([\d]+)$ app/search.php?&searchstring=$2&page=$3 [L,QSA]

RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule ^/?(.+)/([\d]+)$ app/index.php?page=$2 [L]

RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule ^/?(.+)/([\w-]+)$ app/post.php?category=$2 [L]

我将以下代码用于搜索页面

# code to make pretty URLS for search page
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule ^/?(.+)/([\w-]+)/([\d]+)$ app/search.php&searchstring=$2&page=$3 [L,QSA]

但是在使用代码时,我收到500条内部错误消息,但我无法弄清楚是什么错误!

如果有人能帮助我解决这个问题,我将不胜感激。

3 个答案:

答案 0 :(得分:0)

在实现/ category / slug中和对于搜索页面的重写是相同的。搜索请求与第一个匹配-实现重写并运行app / post.php ...

答案 1 :(得分:0)

回答对JarekBaran的后续问题

  

JarekBaran:实现/ category / slug和搜索页面的重写是相同的。

这意味着RewriteCond对应于页面索引/搜索页面和搜索页面的漂亮URL代码。

这意味着将始终使用第一个匹配项,因此:

RewriteRule ^/?(.+)/([\w-]+)/([\d]+)$ app/post.php?&category=$2&page=$3 [L,QSA]

总是会在

之前触发

RewriteRule ^/?(.+)/([\w-]+)/([\d]+)$ app/search.php?&searchstring=$2&page=$3 [L,QSA]

这样,您将无法使用搜索功能。您可以考虑添加一个参数来识别是否进行搜索。

答案 2 :(得分:-1)

您的问题是您以(.+)开头的规则将与任何一项或多项匹配。这意味着您还与/字符匹配。因此,您的2个参数重定向中有一些将您的网址与3个参数匹配。您最好从这样的内容开始-([a-zA-Z0-9-]+)

您的搜索重写可能应该是这样的-RewriteRule ^/?([a-zA-Z0-9-]+)/([\w+]+)/([\d]+)$ app/search.php?&searchstring=$2&page=$3 [L,QSA]

我测试了torek上的重写,并且可以正常工作。

这表示您的其他规则也都需要更改,因为它们都以(.+)开头。完成后,您的类别重写将与您的搜索重写冲突。

但是,这可能对您有用:

 RewriteCond %{REQUEST_FILENAME} !-f
 RewriteCond %{REQUEST_FILENAME} !-d
 RewriteRule ^/?category/([\w-]+)/([\d]+)$ app/post.php?&category=$2&page=$3 [L,QSA]

 RewriteCond %{REQUEST_FILENAME} !-f
 RewriteCond %{REQUEST_FILENAME} !-d
 RewriteRule ^/?category/([\w-]+)/([\w-]+)$ app/post.php?&category=$2&slug=$3 [L,QSA]

 # code to make pretty URLS for search page
 RewriteCond %{REQUEST_FILENAME} !-f
 RewriteCond %{REQUEST_FILENAME} !-d
 RewriteRule ^/?search/([\w+]+)/([\d]+)$ app/search.php?&searchstring=$2&page=$3 [L,QSA]

 RewriteCond %{REQUEST_FILENAME} !-f
 RewriteCond %{REQUEST_FILENAME} !-d
 RewriteRule ^/?([a-zA-Z0-9-]+)/([\d]+)$ app/index.php?page=$2 [L]

 RewriteCond %{REQUEST_FILENAME} !-f
 RewriteCond %{REQUEST_FILENAME} !-d
 RewriteRule ^/?category/([\w-]+)$ app/post.php?category=$2 [L]