.htaccess带有空格的重定向URL

时间:2019-01-04 08:50:10

标签: php apache

我正在尝试通过.htaccess文件将所有无效的URL重定向到我的handleChange = idx => e => { const { name, value } = e.target; console.log(idx); const task_results = [...this.state.task_results]; task_results[idx] = { [name]: value }; this.setState({ task_results }); }; 文件。

不幸的是,我不断收到Apache错误。

我的.htaccess文件

index.php

此无效的网址应重定向到index.php:

RewriteEngine on
RewriteCond %{REQUEST_URI} !\.(?:css|js|jpe?g|gif|png)$ [NC]
RewriteRule ^([a-zA-Z0-9\-\_\/]*)$ index.php?p=$1
RewriteRule ^([A-Za-z0-9\s]+)$ index.php?p=$1 [L] 

但是它会抛出找不到404 Apache错误的对象。

2 个答案:

答案 0 :(得分:1)

您拥有的允许空格的规则不允许使用连字符。您具有的允许连字符的规则不允许空格。因此,包含两者的所有内容都不匹配。

您的无效网址facility-manager%20qsdf包括两者。

我的猜测是,您的RewriteCond应该同时适用于这两个规则,但现在it will apply only to the first RewriteRule after it并非如此。您可以通过仅添加1个RewriteRule并将其修改为接受您想要的所有内容来解决所有这些问题:

RewriteRule "^([A-Za-z0-9\-\_\/\s]+)$" index.php?p=$1 [L] 

请注意,这需要至少一个字符类中的字符,换句话说,当没有路径时,它将不匹配您的“家”位置(“ http://somewhere.com/” )。如果还要匹配该位置,请将+更改为*,以允许0个或多个字符匹配。

答案 1 :(得分:0)

您的重写规则与您指定的URL不匹配。您的REQUEST_URI是

/vacatures/jobapplication/facility-manager%20qsdf 

我怀疑在RewriteRule匹配之前没有完成URL解码,因此它试图按字面上匹配%20,但是%符号不包含在您的匹配中。我不确定您为什么要使用两个RewriteRule-为什么不这样做?

RewriteEngine on
RewriteCond %{REQUEST_URI} !\.(?:css|js|jpe?g|gif|png)$ [NC]
RewriteCond %{REQUEST_URI} !^index.php(\?.*)?$
RewriteRule ^(.*)$ index.php?p=$1 [L]