我正在尝试通过.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错误的对象。
答案 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]