我需要你的.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
。对这个荒谬问题的任何解释或解决方案?
答案 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。