.htaccess不适用于变音符号和(POST)URI

时间:2015-05-27 16:43:03

标签: .htaccess

我需要你的.htaccess文件的帮助(这些文件是我最喜欢的任务之一:-))。我目前的.htaccess看起来如此:

# Start rewrite engine
RewriteEngine on 

# Check if no file, link or directory is requested
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-s
RewriteCond %{REQUEST_FILENAME} !-d

# Do not rewrite install and admin
RewriteRule ^admin$ admin/ [R=301,L]
RewriteRule ^install$ install/ [R=301,L]

# Pass the requested path to index.php
RewriteRule ^([a-zA-Z0-9_]+)/([a-zA-Z0-9_]+)$ index.php?p=$1/$2 [QSA]
RewriteRule ^([a-zA-Z0-9_]+)$ index.php?p=$1 [QSA]

# Define error document for all errors
ErrorDocument 401 index.php?p=error
ErrorDocument 403 index.php?p=error
ErrorDocument 404 index.php?p=error
ErrorDocument 410 index.php?p=error

主要功能正常,但我有以下问题:

如果我生成错误(例如访问/unknownFolder),则会根据需要加载错误页面。但如果我的URI中有变音符号(尤其是ä,ü,ö,ß),则只会输出index.php?p=error。对这个荒谬问题的任何解释或解决方案?

1 个答案:

答案 0 :(得分:2)

您的正则表达式与这些字符不匹配:([a-zA-Z0-9_]+)。尝试将这些分组更改为([^/.]+),以便匹配除斜线和点之外的所有内容:

# Pass the requested path to index.php
RewriteRule ^([^/.]+)/([^/.]+)$ index.php?p=$1/$2 [QSA]
RewriteRule ^([^/.]+)$ index.php?p=$1 [QSA]

可能发生的事情是因为那些umlat字符与这些规则不匹配,它们没有正确地路由到index.php文件,因此404。